Различия между Linux и Solaris /usr/bin/env
У меня есть простой скрипт:
#!/usr/bin/env perl -w
print "Hello World\n"
Сделайте этот исполняемый файл, запустите на Linux, и я получу:
/usr/bin/env: perl -w: No such file or directory
(без -w это работает нормально)
Выполнение того же сценария на компьютере Solaris 8 приводит к правильному выводу.
Любые предложения относительно того, почему это?
3 ответа
Это не env
; это ядро #!
обработчик. Все после первого слова (/usr/bin/env
) передается как строка с одним аргументом. Самый безопасный / самый портативный - ничего не ставить после perl
там.
Какую оболочку вы используете на обеих машинах? Кроме того, какую версию Solaris и Linux вы используете?
Возможно, вы используете KSH в Solaris по умолчанию и BASH в Linux. Эта разница может повлиять на выполнение линии Шебанга.
НТН!
Том Пурл
В статье в Википедии упоминаются следующие проблемы переносимости:
http://en.wikipedia.org/wiki/Shebang_%28Unix%29
"Другой проблемой переносимости является интерпретация аргументов команды. Некоторые системы [12] не разделяют аргументы; например, при запуске скрипта с первой строкой, например,..."
Я нахожу это немного удивительным, но именно оболочка выполняет синтаксический анализ аргументов в пробелах, и здесь не задействована оболочка.