web-dev-qa-db-ja.com

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

現在の日付を取得し、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?

何が問題でしょうか?これはencondingエラーですか?または、スクリプト自体で何かを変更する必要がありますか?

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

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

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

10

おそらく、行末に印刷できない文字(WindowsのCRLFなど)がある場合は、次のコマンドを実行します。

cat -A scriptname

リモートマシンでは、スクリプト内のすべての文字が表示されます。次に、実行中のunixのような形式に変換できます。

dos2unix scriptname
17
fazie

回答を試みた後、これを修正するためにNotepad ++が非常に役立つことがわかりました

cat -Aスクリプト名>

dos2unixスクリプト名

変換しようとするとエラーが発生するためです。

Notepad ++を通じて、編集メニュー/ EOL変換/ Unix/OSX形式にオプションがあります。

まだ非常に学習者ですが、この方法は私の問題を解決しましたが、以前の解決策は問題がどこにあるかを見つけるのに役立ちました。

3
Phoe