リモートコンピュータでスクリプトを実行すると、ファイル名に疑問符が含まれるのはなぜですか?

リモートコンピュータでスクリプトを実行すると、ファイル名に疑問符が含まれるのはなぜですか?

現在の日付を取得し、PHPスクリプトを実行し、出力(およびエラー)を現在の日付を含むファイル名にリダイレクトする小さなスクリプトがあります。

DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1

ローカルコンピュータ(Windows 7、Aptana IDE)でこのスクリプトを実行すると、PHPスクリプトが正常に動作し、ログファイルに予想されるファイル名があります20140502.log

ただし、SFTP経由でリモートシステムにスクリプトをプッシュしてスクリプトを実行すると、ファイル名は次のようになります。

20140502?.log?

何が問題なのでしょうか?エンコードエラーですか(例:SFTPアップロードエンコーディングはANSIIですがUTF-8が必要です)?それともスクリプト自体で何かを変更する必要がありますか?

システム/シェルに関する情報:

[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)

面白い事実:cronjobによってスクリプトが呼び出されると、疑問符は表示されません。スクリプトを手動で実行する場合のみ。

ベストアンサー1

行の末尾に印刷できない文字がある可能性があります(たとえば、WindowsのCRLF)。以下を実行してください。

cat -A scriptname

リモートコンピュータでは、スクリプトのすべての文字が表示されます。その後、Unixシリーズ形式に変換して実行できます。

dos2unix scriptname

おすすめ記事