2008-11-20 16 views
7

Devo impostare una variabile di ambiente di sistema da uno script bash che sarebbe disponibile al di fuori dell'ambito corrente. Così si farebbe normalmente esportare le variabili d'ambiente come questo:Come esportare una variabile di ambiente dell'ambito di sistema in bash

export my_var =/opt/my_var

ma ho bisogno della variabile d'ambiente ad essere disponibili a livello di sistema però. È possibile?

risposta

5

Questo è l'unico modo che conosco per fare quello che vuoi:

In foo.sh, si ha:

#!/bin/bash 
echo MYVAR=abc123 

E quando si desidera ottenere il valore della variabile, si ha per fare il seguente:

$ eval "$(foo.sh)" # assuming foo.sh is in your $PATH 
$ echo $MYVAR #==> abc123 

a seconda di cosa si vuole fare, e come si desidera farlo, potrebbe essere utilizzato il suggerimento di Douglas Leeder sull'utilizzo di fonti, ma sarà fonte il file intero, le funzioni e tutti. Usando eval, verranno valutate solo le cose che vengono echeggiate.

+0

Stavo solo cercando di farlo io stesso. Avevo eval e $ (foo) tranne che ho lasciato le virgolette attorno all'argomento per valutare. Non ha funzionato Grazie per la correzione della sintassi. – jmanning2k

13

Non proprio: una volta eseguito un sottoprocesso non è possibile influenzare il genitore.

sono disponibili due possibilità:

1) Fonte lo script piuttosto che eseguirlo (vedi source .):

 
    source {script} 

2) hanno l'output dello script dei comandi di esportazione, e eval che:

 
    eval `bash {script}` 
OR: 
    eval "$(bash script.sh)" 

MODIFICA: Corretta la seconda opzione da eval anziché da sorgente. Opps.

1

Imposta la variabile in/etc/profile (crea il file se necessario). Ciò renderà essenzialmente la variabile disponibile per ogni processo di bash.

0

Impostare la variabile in/etc/profile (creare il file se necessario). Ciò renderà essenzialmente la variabile disponibile per ogni processo di bash.

... ad ogni processo bash NUOVO ...

Problemi correlati