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)'?