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.
sumber
?
menunjukkan bahwa karakter tidak dapat ditampilkan. Jelas terdengar seperti perbedaan enkode. Bisakah Anda memberi kami hasilenv|grep -E '(LC|LANG)'
?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
Jawaban:
Anda mungkin memiliki beberapa karakter yang tidak dapat dicetak pada akhir baris (mis. CRLF dari Windows), jalankan:
pada mesin jarak jauh, itu akan menampilkan semua karakter dalam skrip Anda. Kemudian, Anda dapat mengonversi ke format unix-like running
sumber
Notepad ++ ditemukan sangat berguna untuk memperbaiki ini setelah mencoba jawabannya
karena ini masih menyajikan kesalahan ketika mencoba untuk mengkonversi.
Melalui Notepad ++ ada opsi di menu edit / EOL Conversion / Unix / OSX Format.
Masih sangat banyak belajar tetapi metode ini memecahkan masalah saya, namun solusi sebelumnya membantu dalam menemukan di mana masalahnya.
sumber