Различия между 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] не разделяют аргументы; например, при запуске скрипта с первой строкой, например,..."

Я нахожу это немного удивительным, но именно оболочка выполняет синтаксический анализ аргументов в пробелах, и здесь не задействована оболочка.

Другие вопросы по тегам