У меня есть крошечный скрипт, который просто выбирает текущую дату, запускает скрипт 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, вопросительные знаки не появляются. Только если я запускаю скрипт вручную.
источник
?
указывает, что символ не может быть отображен. Конечно, звучит как разница кодировки. Можете ли вы дать нам выводenv|grep -E '(LC|LANG)'
?LANG=en_US.UTF-8
.2>&1 >> $FILE
) отправляет stderr в терминал и stdout в файл? Если вы хотите, чтобы stderr также>> $FILE 2>&1
Ответы:
Вероятно, у вас есть некоторые непечатаемые символы в конце строк (например, CRLF из Windows), запустите:
на удаленной машине, он покажет вам все символы в вашем скрипте. Затем вы можете конвертировать в Unix-подобный формат
источник
Нашел Notepad ++ очень полезным для исправления после попытки ответа
поскольку это все еще представляло ошибки при попытке конвертировать.
Через Notepad ++ есть опция в меню редактирования / EOL Conversion / Unix / OSX Format.
Все еще очень ученик, но этот метод решил мою проблему, однако предыдущее решение помогло найти, где была проблема.
источник