Чому ім'я файлу містить знаки запитання під час запуску сценарію на віддаленій машині?


10

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

@ 0xC0000022L Вихід є LANG=en_US.UTF-8.
Gottlieb Notschnabel

вибачте, що незрозуміло. Я мав на увазі вихід з обох кінців.
0xC0000022L

Вибачте за те, що пропустили ... На жаль, ця команда нічого не виводить на Windoze: /
Gottlieb Notschnabel

1
Чи знаєте ви, що ця послідовність перенаправлень ( 2>&1 >> $FILE) посилає stderr до терміналу, а stdout у файл? Якщо ви хочете, щоб stderr також перейшов до файлу, вам потрібно>> $FILE 2>&1
glenn jackman

Відповіді:


17

Напевно, у кінці рядків (наприклад, CRLF від Windows) є якісь недрукувальні символи, запустіть:

cat -A scriptname

на віддаленій машині він покаже всі символи вашого сценарію. Потім ви можете конвертувати у формат, що працює у форматі Unix

dos2unix scriptname

3

Знайдено, що Блокнот ++ дуже корисний для виправлення цього після спроби відповіді

cat -A сценарій>

dos2unix ім'я скрипта

оскільки це все ще представило помилки при спробі конверсії.

Через «Блокнот ++» є опція в меню редагування / EOL Conversion / Unix / OSX Format.

Ще дуже багато слухача, але цей метод вирішив мою проблему, однак попереднє рішення допомогло визначити, де проблема.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.