LINUX.ORG.RU

Разница в shebang

 ,


0

1

Если с вот таким шебангом все понятно:

#!/usr/bin/perl
... он запускает интерпретатор по абсолютному пути и не ищет альтернатив.

То вот эти два варианта вводят меня в недоумение:

#!perl
#!/usr/bin/env perl

Вроди оба должны запускать из PATH. Но есть ли между ними принципиальная разница? Какой лучше использовать? Какой портабельнее?

★★★★★

Последнее исправление: KennyMinigun (всего исправлений: 1)

Ответ на: комментарий от KennyMinigun

Но работает же!

Ни фига себе.

Я думал, так не может работать, поэтому и пишут #!/usr/bin/env perl.

proud_anon ★★★★★
()
Ответ на: комментарий от pawnhearts

Попробовал.

Почему-то если запускать из zsh, то работает, а если из bash или dash, то нет.

При этом #!perl -w работает в zsh, а просто #!perl — нет (Can't open perl script «print 'Hello'»: файл не найден).

proud_anon ★★★★★
()

Вроди оба должны запускать из PATH.

Вроди нит.

Когда ядро exec() файл с shebang-ом, оно не разбирает PATH, а загружает interpreter по абсолютному пути.

Поэтому второй вариант работает. PATH разбирает /usr/bin/env.

SysVinit-hater
()

Правильный только последний. Первый не работает потому что perl может быть по другим путям. Во FreeBSD, например, /usr/local/bin/perl.

Второй у меня не работает в принципе. sh пишет Command not found, zsh - вообще какую-то ерунду

Can't open perl script "print "Hello, world\n";
": No such file or directory

такое чувство что оно вытается запустить perl с аргументом в виде _тела_ скрипта.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

Правильный только последний. Первый не работает потому что perl может быть по другим путям

Все могут быть по другим путям, а env не может?

zolden ★★★★★
()
Ответ на: комментарий от pawnhearts

Ни разу не встречал #!perl вариант.

Время от времени используется в файлах с программами на Перле, которые заведомо не надо запускать сами по себе (им даже бит исполняемости может быть не назначен). Насколько я могу понять, в качестве более универсальной замены для -*-perl-*- и ему подобных директив для редакторов, не более.

Ну, например, вот [0].

[0] http://sources.debian.net/src/rxvt-unicode/9.20-1/src/perl/matcher/

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от zolden

Может, но на практике по другим путям она расположена гораздо реже.

slovazap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.