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