Ich versuche zu verstehen, wie perl
mit der Shebang-Linie befasst.Wie geht Perl mit der Shebang-Linie um?
I verwendet zu denken, dass jeder Interpreter, der in der "Befehlsposition" in der Befehlszeile erwähnt wird, Vorrang vor einem in der Shebang-Zeile erwähnten hat. wenn ein ausführbares Skript zum Beispiel genannt demo
wie diese
#!/usr/local/bin/perl-5.00503
printf "$]\n";
sieht ... dann würde ich folgendes beachten:
$ ./demo
5.00503
% /usr/local/bin/perl-5.22 ./demo
5.022003
IOW, in der ersten Ausführung, der Dolmetscher in der shebang das ist eine läuft, während in der zweiten die in der Befehlszeile erwähnte ist. So weit, ist es gut.
Aber jetzt, wenn ich die „Dolmetscher“ auf dem shebang zu so etwas wie /usr/bin/wc
ändern, dann schlägt es immer jede perl
Interpreter ich auf der Kommandozeile erwähnen:
% cat demo-wc
#!/usr/bin/wc
printf "$]\n";
% ./demo-wc # produces the expected behavior
4 3 31 ./demo-wc
% /usr/local/bin/perl-5.22 ./demo-wc
4 3 31 ./demo-wc
% /usr/local/bin/perl-5.14 ./demo-wc
4 3 31 ./demo-wc
AFAICT, dieses besondere Verhalten scheint begrenzt zu sein perl
Dolmetscher; Nicht perl
Dolmetscher, wie /bin/bash
, nicht „außer Kraft setzen“, um die shebang:
% /bin/bash ./demo-wc
$]
Unterm Strich ist, dass perl
die shebang radikal andere Politik zu haben scheint, erwähnte auf dem Dolmetscher je nach Handhabung.
- Wie
perl
bestimmen, welche Politik zu folgen? - Was genau sind die Richtlinien in beiden Fällen?
beantwortet Schon hier: https://stackoverflow.com/a/29563961/152948 – hobbs
@hobbs Nicht ganz, dass ein Teil der Frage beantwortet. – zdim