Saya memiliki skrip kecil yang hanya mengambil tanggal saat ini, menjalankan skrip PHP dan mengarahkan output (dan kesalahan) ke nama file yang berisi tanggal saat ini.
DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1
Ketika saya menjalankan skrip ini di komputer lokal saya (Windows 7, Aptana IDE), skrip PHP berfungsi dengan baik dan file log memiliki nama file yang diharapkan, misalnya 20140502.log
.
Tetapi ketika saya mendorong skrip itu melalui SFTP ke mesin jarak jauh saya dan menjalankan skrip itu, nama filenya terlihat seperti ini:
20140502?.log?
Apa yang mungkin menjadi masalah? Apakah ini kesalahan enconding (mis. Encoding untuk unggahan SFTP adalah ANSII, di mana UTF-8 diharapkan)? Atau apakah saya harus mengubah apa pun dalam skrip itu sendiri?
Informasi tentang sistem / shell:
[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Fakta lucu: Jika skrip itu dipanggil oleh cronjob, tanda tanya tidak muncul. Hanya jika saya menjalankan skrip secara manual.
LANG=en_US.UTF-8
.
2>&1 >> $FILE
) mengirimkan stderr ke terminal dan stdout ke file? Jika Anda ingin stderr pergi ke file juga, Anda perlu>> $FILE 2>&1
?
menunjukkan bahwa karakter tidak dapat ditampilkan. Jelas terdengar seperti perbedaan enkode. Bisakah Anda memberi kami hasilenv|grep -E '(LC|LANG)'
?