Суть проблемы: если ша-бэнг содержит только только имя файла интерпретатора, то 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
Комментариев нет:
Отправить комментарий