19 Stimmen

Kann ich die Perl-Schalter mit /bin/env in der shebang-Zeile verwenden?

Ich möchte laufen perl -w mit env . Das funktioniert gut auf dem Kommandozeile :

$ /bin/env perl -we 'print "Hello, world!\n"'
Hello, world!

Aber es funktioniert nicht in der Shebang-Zeile in einem Skript:

#!/bin/env perl -w
print "Hello, world!\n";

Hier liegt der Fehler:

/bin/env: perl -w: No such file or directory

Offensichtlich env versteht nicht die -w Flagge, die ich an perl . Was ist los?

26voto

Douglas Leeder Punkte 50423

Der Hash-Bang ist keine normale Shell-Befehlszeile, das Parsing und die Behandlung von Leerzeichen ist anders - das ist es, was Sie getroffen haben. Siehe:

Grundsätzlich fassen viele/meiste Unixe den gesamten restlichen Text nach dem ersten Leerzeichen in einem einzigen Argument zusammen.

Also:

#!/bin/env perl -w

ist das Äquivalent zu:

/bin/env "perl -w"

Sie müssen also alle Optionen für den Perl-Interpreter auf andere Weise behandeln, z.B.

use warnings;

(als @ Telemachus )

16voto

Telemachus Punkte 18969

Anstelle von -w das pragma warnings verwenden (für moderne Versionen von Perl):

#!/bin/env perl
use warnings;
use strict;

6voto

vhold Punkte 61

Ich dachte, es könnte nützlich sein, darauf hinzuweisen, dass "-w" nicht dasselbe ist wie "use warnings". -w gilt für alle Pakete, die Sie verwenden, "use warnings" gilt nur lexikalisch. Normalerweise wollen Sie "-w" nicht verwenden oder sich darauf verlassen.

2voto

Adam Ness Punkte 6118

Es ist erwähnenswert, dass Mac OS X Zeichen nach dem Shebang als Argumente interpretiert, so dass unter OS X das Folgende funktioniert:

#!/usr/bin/env perl -wT
enter code here

Da jedoch einer der Punkte bei der Verwendung von #!/usr/bin/env darin besteht, die plattformübergreifende Kompatibilität zu fördern, ist es wahrscheinlich am besten, diese Syntax nicht zu verwenden, selbst wenn Sie hauptsächlich mit einem Mac arbeiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X