現在の日付をフェッチし、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エラーですか(たとえば、SFTPアップロードのエンコーディングはANSIIであり、UTF-8が期待されます)?または、スクリプト自体で何かを変更する必要がありますか?
システム/シェルに関する情報:
[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
面白い事実:そのスクリプトがcronjobによって呼び出された場合、疑問符は発生しません。スクリプトを手動で実行した場合のみ。
@ 0xC0000022L出力は
—
Gottlieb Notschnabel 2014年
LANG=en_US.UTF-8
です。
不明瞭で申し訳ありません。両端の出力を意味しました。
—
0xC0000022L 2014年
それを逃してすみません...残念ながら、このコマンドはWindozeでは何も出力しません:/
—
Gottlieb Notschnabel
この一連のリダイレクト(
—
glenn jackman
2>&1 >> $FILE
)が端末にstderrを送信し、ファイルにstdoutを送信することを知っていますか?stderrもファイルに移動する場合は、次のものが必要です>> $FILE 2>&1
?
は文字を表示できないことを示します。確かにエンコーディングの違いのように聞こえます。の出力を教えていただけますenv|grep -E '(LC|LANG)'
か?