Страницы

Поиск по вопросам

четверг, 20 июня 2019 г.

bad interpreter: No such file or directory

Суть проблемы: если ша-бэнг содержит только только имя файла интерпретатора, то bash его не находит и ругается
bad interpreter: No such file or directory
Вот Linux на NAS:
$ bash --version GNU bash, version 4.1.11(2)-release (arm-ffp-linux-uclibcgnueabi) Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later
$ cat howdy.pl #!perl
print "Howdy!
";
$ perl howdy.pl Howdy!
$ ./howdy.pl bash: ./howdy.pl: perl: bad interpreter: No such file or directory
$ hash hits command 1 /ffp/bin/bash 2 /ffp/bin/perl 1 /ffp/bin/cat
$ type perl perl is hashed (/ffp/bin/perl)
$ which perl /ffp/bin/perl
А вот Cygwin 2.5.1 (в 1.7.33 не наблюдал):
$ bash --version GNU bash, version 4.3.42(4)-release (i686-pc-cygwin) Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later
$ ls -l howdy.pl -rwxr-xr-x+ 1 user group 26 May 20 12:28 howdy.pl
$ cat howdy.pl #!perl
print "Howdy!
";
$ perl howdy.pl Howdy!
$ ./howdy.pl -bash: ./howdy.pl: perl: bad interpreter: No such file or directory
$ hash hits command 2 /usr/bin/bash 2 /usr/bin/perl 1 /usr/bin/chmod 1 /usr/bin/cat 2 /usr/bin/ls
$ type perl perl is hashed (/usr/bin/perl)
$ which perl /usr/bin/perl
Права на исполнение есть, никаких CR (^M) нет. В Cygwin 2.5.1 проявляется примерно в 50% случаев, т.е. может запуститься, а может и нет.
Проблема, конечно, не великая, но ИМХО так быть не должно.


Ответ

В вашем случае ошибка возникает из-за того, что строка-shebang #!perl эквивалентна #!./perl. Ваш скрипт пытается выполниться интерпретатором, находящимся в текущей директории, и, соответственно, говорит bad interpreter: No such file or directory, потому что в текущей директории у вас нет файла perl.
В виде эксперимента: если вы разместите perl-интерпретатор рядом со скриптом (что довольно странно), то этой ошибки не будет.
...#!interpreter is equivalent to #!./interpreter, however, it's not of any practical use...
The #! magic, details about the shebang/hash-bang mechanism on various Unix flavours

Комментариев нет:

Отправить комментарий