Wie zum ausführen von perl-Datei aus dem shell-Skript
Ich habe eine Frage zur Ausführung der perl-Datei in ein shell-script
Ich habe 2 Dateien jetzt "test.sh" und "test.pl", hier ein Beispiel von meinen Skripten
SHELL-Skript
#!/bin/bash
perl FILEPATH/test.pl
......
PERL-Skript
#!/usr/bin/perl
my $a = "hello"
sub saysomething
{
print $a;
}
.....
Den Weg nenne ich das shell-Skript ist : unter dem Pfad des shell-Skripts, führen Sie "./test.sh"
Alle oben genannten arbeiten, die im Rahmen des Umwelt -
GUN bash, version 4.2.24(1)-release (i686-pc-linux-gnu) + perl (v5.14.2)
Aber wenn ich die scripts auf dem server (was ich nicht ändern konnte die bash /perl version)
GNU bash, version 4.2.10(1)-release (x86_64-pc-linux-gnu) + perl (v5.12.4), bekam ich die followign Nachricht:
FILEPATH/test.pl: Zeile 2: mein: Befehl nicht gefunden
Weiß jemand, wie kann ich dieses problem lösen?
BTW, wenn ich führen Sie das perl-Skript individuell (perl FILEPATH/FILENAME.pl), es funktioniert perfekt.
FILEPATH
einen absoluten oder relativen Pfad? Sollte absoluteIst
FILEPATH
soll eine Umgebungsvariable? Wenn dem so ist, dann sollte es $FILEPATH
.Sie sagte, ich habe 2 Dateien: test.sh & test.pl so was filename.pl ?
Sind Sie auf der sicher, dass die erste Zeile Ihrer Perl-Skript ist
#!/usr/bin/perl
? Wenn du gehst, um uns zu zeigen, code, es ist am besten zu kopieren-und-einfügen; wenn Sie re-geben Sie es ein, riskieren Sie den Verlust wichtiger Informationen.Gibt es eine Möglichkeit, dass die
perl
im perl FILEPATH/test.pl
werden kann "verloren". Zum Beispiel, haben Sie vielleicht ${PERL-perl}
statt nur perl
(oder besser ${PERL:-perl}
), oder Sie haben alias perl=''
oder etwas ähnlich komisches? Die Fehler, die Sie sehen, zeigt an, dass der shell ist das ausführen der Datei, nicht Perl. Und der einzige Weg, ich kann sehen, dass das passiert ist, es gibt einige versteckte ändern Sie den code.
InformationsquelleAutor user1672190 | 2013-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwecks Ausführung eines perl-Skript durch .sh-Skript, die Sie nicht brauchen, zu verwenden perl-Präfix, sondern nur:
Funktioniert es ohne problem.
weitere Ideen für das gleiche .
InformationsquelleAutor Massimo
"Befehl nicht gefunden" ist ein Fehler, emittiert von der shell. Sie versuchen, führen Sie Ihre Perl-script von der shell aus, nicht von Perl.
Führen Sie das Skript von Perl.
InformationsquelleAutor choroba
Überprüfen Sie zuerst, wo perl auf Ihrem system installiert ist, z.B.
which perl
und-Nutzung, die Lage in der shebang-Zeile statt/usr/bin/perl
, wenn es anders ist.Wenn alle anderen Empfehlungen fehlschlagen, überprüfen Sie die erste Zeile des Skripts auf dem Rechner wo es nicht läuft ordnungsgemäß durch, dies zu tun:
head -1 test.pl | xxd
. Nimmt der Ausgang der letzten beiden bytes als0d 0a
? Wenn ja, werden Sie wahrscheinlich kopiert die Datei über Windows und nicht ein dos2unix-Konvertierung.InformationsquelleAutor imran
Dieses problem ist mindestens zwei-Fach. Man, man haben die Lage des Perl in Ihrer Umgebung WEG. Zwei, die Lage des Perl kann unterschiedlich sein an verschiedenen Maschinen. Eine Lösung für beide Probleme, die ich und andere haben seit Jahren verwendet, ist eine "Magie header" irgendeiner Art an der Spitze von Perl-Programmen. Der header identifiziert sich selbst als eine sh-shell-Skript und nutzt die Tatsache, dass /bin/sh existiert in jeder version/Geschmacksrichtung von Linux/UNIX. Die header-job ist für die Stärkung der PFAD mit verschiedenen möglichen Perl-Standorten und führen Sie dann das Perl-Skript selbst (via exec). Hier ist ein "Hello World" - Beispiel:
Hinweis: ich fügte hinzu, Linie zahlen, nur um es klar, wo die Linien beginnen und enden.
InformationsquelleAutor Ken Schumack