2009-11-17 15 views
15

Wie setze ich eine Umgebungsvariable in Perl?Wie setze ich eine Umgebungsvariable in Perl?

Ich möchte $HOME in ein anderes Verzeichnis als die Standardeinstellung festlegen.

+0

Nicht getäuscht, da diese Frage nicht zum Festlegen einer Umgebungsvariablen in einem übergeordneten Prozess von einem untergeordneten Element dient. – mob

Antwort

34

Sie können es wie folgt tun:

$ENV{HOME} = 'something different'; 

Bitte beachten Sie jedoch, dass dies nur im Rest des Skripts eine Wirkung hat. Wenn das Skript beendet wird, geben Sie the calling shell will not see any changes ein.

Wie perldoc -v %ENV sagt:

%ENV Die Hash %ENV aktuelle Umgebung enthält. Wenn Sie einen Wert in "ENV" setzen, ändert sich die Umgebung für alle untergeordneten Prozesse, die Sie anschließend "fork()" deaktivieren.

6
$ENV{'HOME'} = '/path/to/new/home'; 

Siehe auch perlrun

1

Wenn Perl gestartet wird es eine eigene Sub-Shell macht. Diese Subshell enthält nicht alle Funktionen wie das Sourcen einer Shell-Datei, die nur für Haupt-Shells verfügbar sind. Sie können keinen Umgebungspfad für Ihre Haupt-Shell festlegen. Sie können eine Sache tun, wenn Sie eine Shell-Datei haben, von wo Sie auf Ihre Pfade zugreifen möchten, können Sie es in Ihrem Code verwenden.

Sie können dies tun, indem Sie ein externes Modul von CPAN installieren, das Shell :: Source ist.

$env_path= Shell::Source->new(shell=>"tcsh",file=>"../path/to/file/temp.csh"); 
$env_path->inherit; 
print "Your env path: $ENV{HOME}"; 

Als Perl schafft eine eigene Instanz, während auf einer Shell ausgeführt wird, so können wir nicht Umgebungspfad für die Hauptschale als die Perl-Instanz festgelegt werden, wie Unterschale des Hauptschale sein. Der untergeordnete Prozess kann keine Umgebungspfade für Eltern festlegen.

Jetzt bis die Unter Shell Perl laufen Sie in der Lage sein werden, alle Pfade in Ihrem temp.csh vorhanden zugreifen

-2

Es ist kitschig, aber Sie könnten ein VBS-Skript-System aufrufen („cscript your_vbs_script“) damit es die Zuweisung der Umgebungsvariablen handhabt. Es wird für die nächste geöffnete Shell existieren, in diesem Fall nicht für die laufende Shell.

Verwandte Themen