Назад | Перейти на главную страницу

Различия между 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 дает правильный результат.

Любые предложения относительно того, почему это так?

Это не env; это ядро #! обработчик. Все после первого слова (/usr/bin/env) передается как строка с одним аргументом. Самый безопасный / самый портативный - не ставить ничего после perl там.

В статье в Википедии упоминаются эти проблемы с переносимостью:

http://en.wikipedia.org/wiki/Shebang_%28Unix%29

«Другой проблемой переносимости является интерпретация аргументов команды. Некоторые системы [12] не разделяют аргументы; например, при запуске сценария с первой строкой, такой как, ...»

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

Какую оболочку вы используете на обеих машинах? Кроме того, какую версию Solaris и Linux вы используете?

Возможно, вы используете KSH в Solaris по умолчанию и BASH в Linux. Это различие может повлиять на выполнение строки shebang.

HTH!

Том Перл