2013-03-18 3 views
7

J'écris un script shell, pour lire un fichier qui a une paire clé = valeur et définir ces variables comme variables d'environnement. Mais j'ai un doute, si je fais source file.txt va définir les variables définies dans ce fichier comme variable d'environnement ou je devrais lire le fichier ligne par ligne et le définir en utilisant la commande d'exportation?Unix: Quelle est la différence entre la source et l'export?

La commande source dans ce cas est-elle différente de l'exportation?

+0

shell que vous utilisez? – shx2

+2

Pourquoi n'essaies-tu pas de le découvrir? – Mat

+0

Je serais très méfiant de 'source'-ing un fichier défini par l'utilisateur dans un script shell dans un environnement de production. Imaginez un employé mécontent ajoutant la ligne 'rm -rf $ {HOME}' (ou pire) ... – Johnsyweb

Répondre

12

Lorsque vous source le fichier, les affectations seront définies en tant que variables, mais pas en tant que variables d'environnement, sauf si l'option allexport a été définie. Si vous souhaitez que les variables soient placées dans l'environnement, il est beaucoup plus simple d'utiliser le fichier allexport et source que de lire le fichier et d'utiliser explicitement export. En d'autres termes, vous devez faire:

set -a 
. file.txt 

(je préfère . parce qu'il est plus portable que source, mais source fonctionne très bien dans bash.)

Questions connexes