Перейти к содержанию

почему не работает перловый скрипт с #!perl ?


Рекомендуемые сообщения

ubuntu 7.04

Apache + perl

Если в скрипте стоит #!usr/bin/perl, то всё работает, а если просто #!perl, то не работает, пишет в логе "(2)No such file or directory: exec of '/usr/lib/cgi-bin/printenv.pl' failed", хотя /usr/bin есть в PATH.

Почему?

Ссылка на комментарий
Поделиться на другие сайты

Yury900 писал(а) Thu, 01 November 2007 17:25

ubuntu 7.04

Apache + perl

Если в скрипте стоит #!usr/bin/perl, то всё работает, а если просто #!perl, то не работает, пишет в логе "(2)No such file or directory: exec of '/usr/lib/cgi-bin/printenv.pl' failed", хотя /usr/bin есть в PATH.

Почему?

Потому что этот заголовок читается не bash'ем а ядром, которое уже передаёт управление соответсвующей оболочке. В вашем случае perl'у.

Ссылка на комментарий
Поделиться на другие сайты

Неа Smile Это как раз командный интерпретатор обрабатывает эту строчку. Для примера, вот выдержка из man bash:

Раздел COMMAND EXECUTION

If this execution fails because the file is not in exe-

cutable format, and the file is not a directory, it is

assumed to be a shell script, a file containing shell com-

mands. A subshell is spawned to execute it. This sub-

shell reinitializes itself, so that the effect is as if a

new shell had been invoked to handle the script, with the

exception that the locations of commands remembered by the

parent (see hash below under SHELL BUILTIN COMMANDS) are

retained by the child.

If the program is a file beginning with #!, the remainder

of the first line specifies an interpreter for the pro-

gram. The shell executes the specified interpreter on

operating systems that do not handle this executable for-

mat themselves.

Ссылка на комментарий
Поделиться на другие сайты

Видимо, эта выдержка относится только к скриптам, запущенным руками из консоли. :) Вот, что я нашёл в Advansed Bash-Scripting Guide

Цитата:

Если файл сценария начинается с последовательности #!, которая в мире Unix называется sha-bang, то это указывает системе какой интерпретатор следует использовать для исполнения сценария. Это двухбайтовая последовательность, или [1] -- специальный маркер, определяющий тип сценария, в данном случае -- сценарий командной оболочки (см. man magic). Более точно, sha-bang определяет интерпретатор, который вызывается для исполнения сценария, это может быть командная оболочка (shell), иной интерпретатор или утилита. [2]

И вот, что говорит вики по поводу sha-bang:

Цитата:

shebang (also called a hashbang, hashpling, or pound bang) refers to a pair of characters "#!" that, when used as the first two characters on the first line of a script, causes Unix-like operating systems to execute that script using the interpreter specified by the rest of that line.

More precisely, a shebang line consists of a number sign and an exclamation point character ("#!"), followed by the (full) path to the interpreter program that will provide the interpretation. The shebang is looked for and used when a script is invoked directly (as you would a regular executable), and largely to the end of making scripts look and act similarly to regular executables, to the operating system and to the user.

Т.е. сама система решает, как его запускать, а не оболочка, если я правильно понял.

Ссылка на комментарий
Поделиться на другие сайты

Скрипт открывает и читает кто? Правильно, оболочка (aka shell, aka командный интерпретатор). Так кто же будет принимать решение о том, как отработать эту строку? Разумеется сам этот интерпретатор.

Ссылка на комментарий
Поделиться на другие сайты

Legalizer писал(а) Fri, 02 November 2007 14:44

Скрипт открывает и читает кто? Правильно, оболочка (aka shell, aka командный интерпретатор).

Здрассти, приехали. Открывает и читает его Apache и передает его через CGI в mod_perl. А уж как там настроено - чем открывать, тем и открывает. Скорее всего открывает /bin/sh и соответственно, с ненастроенной PATH.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...