J'ai écrit le script suivant pour définir certaines variables d'environnement lorsque cela est nécessaire.
#!/bin/sh
export BASE=/home/develop/trees
echo $BASE
export PATH=$PATH:$BASE
echo $PATH
Ci-dessous la commande et les résultats que je peux voir sur mon terminal: le script s'exécute, mais les variables ne sont pas définies à la fin.
~$: ./script.sh
/home/develop/trees
/bin:......:/home/develop/trees
~$: echo $BASE
~$:
Qu'est-ce qui ne va pas? Merci d'avance. Mirko
la source
export
de transmettre des variables aux sous-shell, un sous-shell est une copie de votre shell actuel, y compris les variables et les fonctions, etc. Les variables exportées sont copiées dans les nouveaux processus générés à partir du shell, que ce processus soit un autre shell ou non. Deuxièmement,.
la commande POSIX pour le sourcing. Bash ajoutesource
un synonyme plus lisible, mais vous ne pouvez pas compter sur sa disponibilité dans sh. Enfin. ./script
au lieu de. script
si vous voulez éviter les surprises. mywiki.wooledge.org/BashFAQ/0/060Lorsque vous exécutez un script, il s'exécute dans un sous-shell. Les variables ne sont valables que dans le contexte de ce sous-shell. Placez-les dans votre
.bashrc
ou.profile
et lisez sur les variables et les sous-shell . L'export
instruction fonctionne en bas de la hiérarchie (shell actuel et tous ses sous-shell) pas comme dans votre exemple.Alternativement (si vous voulez vraiment que le script affecte l'environnement de votre shell actuel), exécutez-le en tant que:
Cela provoque son exécution dans votre shell actuel mais ne transmet pas non plus de variables dans la hiérarchie.
la source
Je veux souvent définir une variable d'environnement sans tracas.
Voici ce que j'ajoute à mon .bashrc pour implémenter cette commodité.
la source
Vous pouvez essayer quelque chose comme ça
la source