2013-03-18 55 views
7

Sto scrivendo uno script di shell, per leggere un file che ha coppia chiave = valore e impostare quelle variabili come variabili di ambiente. Ma ho un dubbio, se faccio source file.txt imposteremo le variabili definite in quel file come variabile d'ambiente o dovrei leggere il file riga per riga e impostarlo usando il comando export?Unix: Qual è la differenza tra la fonte e l'esportazione?

In questo caso il comando di origine è diverso dall'esportazione?

+0

quello guscio stai usando? – shx2

+2

Perché non provi a scoprirlo? – Mat

+0

Sarei molto cauto su 'source' -ing un file definito dall'utente in uno script di shell in un ambiente di produzione. Immagina un impiegato insoddisfatto che aggiunge la riga 'rm -rf $ {HOME}' (o peggio) ... – Johnsyweb

risposta

12

Quando si esegue il file source, le assegnazioni verranno impostate come variabili ma non come variabili di ambiente a meno che non sia stata impostata l'opzione allexport. Se si desidera inserire le variabili nell'ambiente, è molto più semplice utilizzare il file allexport e source piuttosto che leggere il file e utilizzare export in modo esplicito. In altre parole, si dovrebbe fare:

set -a 
. file.txt 

(io preferisco . perché è più portabile di source, ma source funziona bene in bash.)