2009-11-17 12 views
15

Come impostare una variabile d'ambiente in Perl?Come imposto una variabile d'ambiente in Perl?

Desidero impostare $HOME in una directory diversa da quella predefinita.

+0

Un-duped perché questa domanda non riguarda l'impostazione di una variabile di ambiente in un processo padre da un figlio. – mob

risposta

34

Si può fare in questo modo:

$ENV{HOME} = 'something different'; 

Ma si ricorda che questa avrà effetto solo nel resto dello script. Alla chiusura dello script, the calling shell will not see any changes.

Come perldoc -v %ENV dice:

%ENV L'hash %ENV contiene l'ambiente corrente. L'impostazione di un valore in "ENV" modifica l'ambiente per tutti i processi figlio che successivamente "fork()" disattivato.

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

vedere anche perlrun

1

Quando perl viene avviato lo rende proprio guscio sub. Questa sub shell non contiene tutte le funzionalità come l'individuazione di un file di shell che sono disponibili solo per le shell principali. Non è possibile impostare alcun percorso di ambiente per la shell principale. Puoi fare una cosa se hai un file di shell da cui vuoi accedere ai tuoi percorsi puoi usarlo nel tuo codice.

È possibile eseguire questa operazione installando un modulo esterno da CPAN che è Shell :: Source.

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

Perl crea una propria istanza durante il funzionamento a una conchiglia, quindi non possiamo impostare percorso di ambiente per shell principale come esempio del Perl sarà come sub guscio del guscio principale. Il processo figlio non può impostare percorsi ambientali per i genitori.

Ora fino sub guscio della perl verrà eseguito sarete in grado di accedere a tutti i percorsi presenti nel vostro temp.csh

-2

E 'di formaggio, ma si potrebbe chiamare uno script VBS utilizzando il sistema ("cscript your_vbs_script") per farlo gestire l'assegnazione della variabile d'ambiente. Esisterà per la prossima shell aperta, non per la shell corrente in quel caso.

Problemi correlati