wie Quelle ein shell-Skript [Umgebungsvariablen] im perl-Skript ohne Verzweigung einer subshell?
Möchte ich nennen "env.sh" aus "my_perl.pl" ohne Verzweigung einer subshell. Ich habe versucht, mit backtics und system --> system (. env.sh)
[dot Raum env.sh] , jedoch nicht funktionieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kind-Umgebungen nicht ändern übergeordneten Umgebungen. Ihre beste Wette ist, um zu analysieren
env.sh
aus dem inneren der Perl-code und setzen Sie die Variablen in%ENV
:Gegeben
druckt es
Kann der code nur mit einfacher Dateien (zum Beispiel, es nicht handhaben
if
Aussagen oderfoo=$(date)
). Wenn Sie etwas mehr Komplex, dann schreiben Sie ein wrapper für Perl script, dass die Quellenenv.sh
erste ist der richtige Weg zu gehen (ist es wahrscheinlich auch der richtige Weg zu gehen in den ersten Platz).Weiterer Grund, die Quelle
env.sh
vor Ausführung des Perl Skript ist, dass das setzen der Umgebungsvariablen in Perl kann passieren, zu spät für Module, die erwartet werden, um Sie zu sehen.In der Datei
foo
:wo foo.real ist Perl script.
Können Sie beliebig komplexe shell-Skripte, indem Sie ausführt, die mit den einschlägigen shell, dumping Ihre Umgebung auf der standard-Ausgabe, die in demselben Prozess, und analysieren, dass in perl. Die Fütterung der Ausgang in etwas anderes als das %ENV oder Filter für bestimmte Werte von Interesse ist klug, so dass Sie nicht ändern Sie die Dinge, wie WEG, vielleicht haben interessante Nebenwirkungen an anderer Stelle. Habe ich verworfen, standard-Ausgabe und Fehler aus die erzeugte shell-Skript, obwohl Sie umgeleitet werden konnte, um temporäre Dateien und verwendet für die Diagnoseausgabe in das perl-script.
foo.pl:
foo.sh:
export BAR=baz
Versuchen, diese (unix-code-Beispiel):
cd /tmp
vi s
vi t
chmod 777 s t
./t
ENV erste Anruf :
ENV zweiten Aufruf : test
Ist der trick mit dem exec, um die Quelle Ihrer bash-Skript zuerst und dann ruft Sie Ihre perl-Skript wieder mit einem argument, so u wissen, dass man Sie ein zweites mal aufgerufen.