ฉันมีสคริปต์เล็ก ๆ ที่ดึงข้อมูลวันที่ปัจจุบันเรียกใช้สคริปต์ PHP และเปลี่ยนเส้นทางผลลัพธ์ (และข้อผิดพลาด) ไปยังชื่อไฟล์ที่มีวันที่ปัจจุบัน
DATE=$(date +"%Y%m%d")
FILE="log/${DATE}.log"
php -q script.php >> $FILE 2>&1
เมื่อฉันเรียกใช้สคริปต์นี้บนเครื่องท้องถิ่นของฉัน (Windows 7 Aptana IDE) ที่สคริปต์ PHP ทำงานได้ดีและ logfile 20140502.log
มีชื่อไฟล์ที่คาดไว้เช่น
แต่เมื่อฉันกดสคริปต์นั้นผ่าน SFTP ไปยังเครื่องระยะไกลของฉันและเรียกใช้สคริปต์นั้นชื่อไฟล์จะเป็นดังนี้:
20140502?.log?
อาจมีปัญหาอะไร? นี่เป็นข้อผิดพลาดการเข้ารหัส (เช่นการเข้ารหัสสำหรับการอัปโหลด SFTP คือ ANSII ซึ่งคาดว่า UTF-8) หรือฉันจะต้องเปลี่ยนแปลงอะไรในสคริปต์ตัวเอง?
ข้อมูลเกี่ยวกับระบบ / เชลล์:
[foo@bar path]$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
ความจริงตลก: ถ้าสคริปต์นั้นถูกเรียกโดย cronjob เครื่องหมายคำถามจะไม่เกิดขึ้น เฉพาะเมื่อฉันเรียกใช้สคริปต์ด้วยตนเอง
LANG=en_US.UTF-8
เอาท์พุท
2>&1 >> $FILE
) ส่ง stderr ไปยังเทอร์มินัลและ stdout ไปยังไฟล์ หากคุณต้องการ stderr ไปที่ไฟล์เช่นกันคุณต้อง>> $FILE 2>&1
?
บ่งชี้ว่าไม่สามารถแสดงอักขระได้ แน่นอนดูเหมือนความแตกต่างการเข้ารหัส คุณช่วยให้เราส่งออกของenv|grep -E '(LC|LANG)'
?