2010-07-10 9 views
17

Ich habe durch eine Reihe von Tutorials gesucht, aber ich kann immer noch nicht herausfinden, was ich tue, falsch .. ich den Code unten bin versucht (in einer .pl Perl-Datei als ausführbares):Wie werden Perl "one liner" Befehlszeilenskripte ordnungsgemäß ausgeführt?

#!/usr/bin/perl 

perl -e 'print "Hello";' 

ich dieses Skript und erhalten:

Durchführung von /home/user1/Desktop/file_backups.pl wegen Übersetzungsfehlern abgebrochen.

(Ich bin neu Perl mit der Linux-Befehlszeile aufzurufen.)

+1

Willst du Perl in der Linux (Shell) -Befehlszeile aufrufen, oder die Shell Perl aufrufen lassen? – Ether

Antwort

12

perl kein gültiger Befehl in einem Perl-Skript ist. Wenn Sie diese Datei als SH-Skript benannt und in der Shebang-Zeile #!/bin/bash verwendet hätten, hätte es funktioniert, aber es macht nicht viel Sinn, eine bash-Datei zu schreiben, nur um Perl aufzurufen (warum nicht Perl aufrufen) direkt?)

Da Sie erwähnt haben, dass Sie mit der Befehlszeile interagieren wollen, werde ich hier erwähnen, dass Sie über das Array @ARGV die Befehlszeilenoptionen in Perl erhalten können. (. Siehe perldoc perlvar)

14

Versuchen:

#!/usr/bin/perl 
# This is a comment ~~~ 
# This script will be run as a Perl script 
# since 'perl' isn't a keyword or function in Perl 
# something like this must fail: 
# 
# perl -e 'print "Hello";' 
# 
# The following should work. 

print "Hello"; print " World\n"; 

Oder, wenn Sie Ihre Shell-Skript wollen Perl Code auszuführen:

#!/bin/sh 
# That's a Bash script ~~~ 
# It's just a command line in a file ...  

perl -e 'print "Hello World";' 

Hintergrund: #! ist ein interpreter directive.

Wenn der Befehl ausgeführt wird, wird er in eine Ausführung des Interpreters konvertiert.

0

Sie könnten versuchen, dies zu tun:

system("/usr/bin/perl -e 'print \"Hello!\\\\n\";'"); 
+0

Danke für die Antworten .. Nun, was ich versuche zu schreiben Perl-Skripte, die mit der Befehlszeile interagieren, ich denke, ich hatte es rückwärts als was ich sah sind Bash/Shell-Skripte, um perl – Rick

+3

Dies ist nur schlechter Rat. OP möchte Hallo in einem Perl-Skript drucken. Benutze einfach Print. – ghostdog74

+0

@ghostdog: Ich versuche nicht, dies zu empfehlen, es ist nur eine Antwort auf eine direkte Frage. Ich versuche nicht zu urteilen. es sieht so aus, als ob er das Gegenteil sucht, also sind wir beide weg. :-) – eruciform

0

Da Sie sagten, Sie für das andere sucht, kann das sein, was Sie bedeuten:

# vi stdin.pl 
# cat stdin.pl 
    #!/usr/bin/perl 
    while(<STDIN>) 
    { 
     if(/^hello/){ print "Hello back to ya!\n"; } 
    } 
# chmod 0777 stdin.pl 
# ./stdin.pl 
    foo 
    hello 
    Hello back to ya! 
# 
9

Geben Sie einfach auf der Kommandozeile (nicht in einer Datei)

perl -e 'print "Hello World\n";'

Dies ist nur wirklich gut für oneliner. Längere Skripte ihre eigene Datei benötigen ...

0

Angenommen, Sie haben die folgenden Eingaben:

$ for i in a b c ; do echo "$i is $i" > $i; done 

$ cat a b c 
a is a 
b is b 
c is c

Jeder weiß Großbuchstaben sind viel besser!

perl -i.bak -pe '$_ = uc' a b c

So, jetzt

$ cat a b c 
A IS A 
B IS B 
C IS C

Aber wir würden wirklich gerne diese in einem Befehl upcase aufgerufen kann, und das ist einfach zu tun!

#! /usr/bin/perl -pi.bak 
$_ = uc 

Sehen Sie es bei der Arbeit:

$ for i in a b c ; do echo "$i is $i" > $i; done 

$ cat a b c 
a is a 
b is b 
c is c 

$ ./upcase a b c 

$ !cat 
cat a b c 
A IS A 
B IS B 
C IS C

Weitere Tipps von einem answer to a similar question:

Die -e Option stellt Perl-Code ausgeführt-was werden Sie als Skript denken könnte auf die Befehlszeile - also lass es los und stecke den Code in den Körper. Lassen Sie -p in der Shebang (#!) Linie.

Im Allgemeinen ist es am sichersten, an höchstens einem "Büschel" von Optionen in der Shebang-Linie zu bleiben. Wenn Sie mehr benötigen, können Sie ihre Entsprechungen immer in einen BEGIN {} Block werfen.

Vergessen Sie nicht, das Ausführungsbit einzuschalten!

chmod +x script-name 

Weil Sie nicht die tatsächliche Einzeiler Sie konvertieren möchten, geben habe, hatte ich eine breite, allgemeine Antwort zu geben. Wenn Sie Ihre Frage so bearbeiten, dass sie spezifisch für das ist, was Sie tun möchten, können wir Ihnen hilfreichere Antworten geben.

3

Dies sollte funktionieren. Doppelte Anführungszeichen außerhalb einfacher Anführungszeichen innen;)

+0

Es tut mir leid, diesen alten Beitrag wieder aufleben zu lassen, aber wo kann ich mir die Bedeutung der Optionen ansehen? (d. h. Ihr "-e") Danke – Sosi

+1

@Sosi "man perl" –

Verwandte Themen