У мене крихітний сценарій, який просто отримує поточну дату, запускає скрипт 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?
У чому може бути проблема? Це помилка введення (наприклад, кодування для завантаження 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)'
?