Setup Environment variable mit perl
Ich versuche set environment variable mit Perl. Es sollten exportieren Sie diese variable außerhalb (in der aktuellen shell) nicht nur in das Skript.
Habe ich versucht:
`setenv X1 /p/fsd`
system("setenv X1 /p/fsd") == 0 or die "failed:$?"
system command "setenv X1 /p/fsd" failed: -1
$ENV{"X1"} = "/p/fsd";
Nichts scheint zu funktionieren.
Wenn es darauf ankommt, bin ich mit TCSH.
Möglich, Duplikat der das setzen einer environment-variable durch ein Perl-Skript
InformationsquelleAutor user1793023 | 2012-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
ist der richtige Weg.
Test in
perlconsole
:HINWEIS
echo $X1
um zu verhindern, dassperl
zu interpolieren, es selbst.Dies ist das Prinzip der subshell. Wenn Sie töten den Vater, Sie zu töten, der Sohn auch, das ist traurig, aber so ist das Leben.
Link Hinzugefügt, für Erklärungen über Unterschalen und Eltern.
ja.. in diesem Fall könnte ich ändern, shell und Bash verwenden und versuchen, Skript, shell-scripting, da tcsh Gehirn tot ist, die für scripting.
Danke... für meine Augen zu öffnen... 🙂 ich dachte es gibt einen Weg, aber nicht Aussehen wie mit perl....
InformationsquelleAutor Gilles Quenot
Weil es keine Sonderzeichen in
setenv X1 /p/fsd
,entspricht
Es fehlschlägt, weil es kein Programm mit dem Namen
setenv
. Wenn diese Optimierung nicht vorhanden, erhalten Sie ein anderes Ergebnis*. In diesem Fallwäre äquivalent zu
Dass würde nicht funktionieren, weil
sh
hat keinesetenv
Befehl. So könnten Sie führen Sie den folgenden statt:Aber es wäre sinnlos. Sie würde erstellen Sie eine shell, geben Sie in einer Ihrer Variablen. Dann wird die Schale verlässt und seine Variablen nicht mehr existieren.
Wenn Sie möchten, um eine env-var, gesehen von Perl und Ihre Kinder, nutzen Sie einfach
oder
* Optimierte code sollte sich nicht anders Verhalten als unoptimised code, aber da die Optimierung nur änderungen, welche Fehler du bekommst, es ist akzeptabel.
InformationsquelleAutor ikegami
Ebenso wichtig zu wissen, wie man eine env-variable ist, wie es zu löschen:
Dieser löscht die Umgebungsvariable für den perl-Prozess und alle Kinder verarbeitet. Aber die environment-variable noch gesetzt werden, die für den übergeordneten Prozess.
Diese sind äquivalent. Im Allgemeinen, wir lassen das in Anführungszeichen, weil es einfacher ist. Vor allem mit Umwelt-Variablen, weil Sie Großbuchstaben und keine Sonderzeichen. Es ist möglich, die Anführungszeichen sind erforderlich, wenn Sie mit seltsamen Sonderzeichen. Siehe diese Diskussion
InformationsquelleAutor jcarballo
Als anderen Antworten erwähnt, können Sie nicht eine Umgebungsvariable festlegen, in der die Eltern von dem Kind. Jedoch, Sie könnte etwas kompliziert in perl und dann das Ergebnis wieder auf der shell eingestellt werden. Zum Beispiel, in
tcsh
:Den man machen kann diese fühlen sich ein bisschen mehr transparent, z.B.,
ssh-agent
hat das gleiche problem (setzen von environment-Variablen in der aufrufenden shell) und verwendet die gleicheneval
trick. Es hat sogar die Schalter für die verschiedenen setenv Syntax insh
undcsh
(-s
resp.-c
).InformationsquelleAutor mavit