У меня есть крошечный скрипт, который просто выбирает текущую дату, запускает скрипт 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)'
?