вызов Perl-скриптов - PullRequest
       1

вызов Perl-скриптов

2 голосов
/ 30 августа 2010

У меня есть сценарии Perl, начинающиеся с #!/usr/bin/perl или #!/usr/bin/env perl

Во-первых, что означает вторая версия?

Во-вторых, я использую Ubuntu.Все скрипты устанавливаются как исполняемые файлы.Когда я пытаюсь запустить скрипт, просто вызывая его имя (например, ./script.pl), я получаю : No such file or directory.когда я вызываю perl ./script.pl, он работает нормально.

Почему?

Ответы [ 2 ]

3 голосов
/ 30 августа 2010

#!/usr/bin/env perl использует стандартный инструмент POSIX env, чтобы обойти «проблему», заключающуюся в том, что UNIX не поддерживает относительные пути в линиях Шебанга (AFAIK).Инструмент env можно использовать для запуска программы (в данном случае perl) после изменения переменных среды.В этом случае переменные не изменяются, а env затем ищет в PATH Perl и запускает его.Таким образом, скрипт с этой конкретной строкой shebang будет работать, даже если Perl установлен не в /usr/bin, а по какому-то другому пути (который должен быть в переменной PATH).работает: вы сказали, что в нем установлены исполняемые биты, как в chmod +x script.pl?Но также начинается ли с линии Шебанга (#!)?То есть самые первые два байта должны быть #!, и за ним должен следовать путь к файлу (до perl).Это необходимо, чтобы сообщить ядру, с какой программой запускать этот скрипт.Если вы сделали это, правильный ли путь?Вы хотите попробовать вариант #!/usr/bin/env perl; -)

2 голосов
/ 30 августа 2010

Использование #!/usr/bin/env perl обходит проблему perl, не обязательно входящую в /usr/bin в каждой системе; это просто сделать скрипт более переносимым


В связанной заметке, для вашей второй проблемы, есть /usr/bin/perl и / или /usr/bin/env? Если нет, это объясняет, почему запуск сценариев напрямую не работает; Шебанг не обрабатывается, если вы запускаете скрипт в качестве аргумента для perl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...