Réglage de la variable d'environnement shell script n'est pas de le rendre visible pour le shell
Je veux utiliser un script shell que je peux appeler pour définir certaines variables d'environnement. Cependant, après l'exécution du script, je ne vois pas la variable d'environnement à l'aide de "printenv" dans bash.
Voici mon script:
#!/bin/bash
echo "Hello!"
export MYVAR=boubou
echo "After setting MYVAR!"
Quand je fais "./test.sh" je vois:
Hello!
After setting MYVAR!
Quand je fais "printenv MYVAR", je ne vois rien.
Pouvez-vous me dire ce que je fais mal?
Vous devez vous connecter pour publier un commentaire.
C'est la façon dont les variables d'environnement de travail. Chaque processus dispose d'une copie de l'environnement. Toute modification du procédé à sa copie propager aux processus enfants. Ils ne sont pas, cependant, de propager le processus parent.
Un moyen de contourner cela est d'utiliser la
source
commande:ou
(les deux formes sont synonymes).
Lorsque vous faites cela, au lieu d'exécuter le script dans un sous-shell,
bash
seront exécutées à chaque commande dans le script, comme si c'était tapé à l'invite de commandes.bash test.sh
, cela crée un nouveaubash
processus qui exécute le script et les sorties.sudo
? Je reçoissudo: .: command not found
Une autre solution serait d'avoir le script impression les variables que vous souhaitez définir, avec
echo export VAR=value
et neeval "$(./test.sh)"
dans votre shell principal. C'est l'approche utilisée par les divers programmes [par exemple, redimensionner, dircolors] qui fournissent des variables d'environnement à définir.Cela ne fonctionne que si le script n'a pas d'autre sortie (ou si tout autre résultat s'affiche sur la sortie stderr, avec
>&2
)