Comment puis-je faire en sorte que les variables d'environnement "exscopes" dans un script shell restnt présentes?

J'ai plusieurs counts Amazon EC2 et je veux pouvoir changer rapidement de variables, comme $EC2_HOME , en utilisant un script.

J'ai un script shell configuré comme ceci:

 #!/bin/sh export EC2_HOME=/home/me/.ec2 echo $EC2_HOME 

Lorsque EC2_HOME le script, je sais que EC2_HOME est défini, mais je pensais qu'utiliser l' export ferait que la variable EC2_HOME place après l'exécution du script. Ce n'est pas le cas, car echo $EC_HOME n'affiche rien.

Je sais que cela doit être une connaissance très rudimentaire des scripts Linux, mais je ne le sais pas. J'ai essayé de chercher des questions connexes sans succès – donc mes excuses si c'est un doublon.

Vous devriez générer votre script avec

 . ./script 

ou

 source ./script 

Lorsque vous exécutez un script, il obtient son propre environnement et son propre environnement, qui disparaissent de nouveau dès que le script est terminé. Pour conserver les variables d'environnement, searchz le script dans votre shell actuel:

 $ source ./a.sh 

ou de manière équivalente (mais un peu plus facilement) utiliser la command point POSIX :

 $ . ./a.sh 

Ensuite, les définitions seront placées dans l'environnement de votre shell actuel et héritées par les programmes que vous lancerez.

Pour être plus proche de l'exécution d'un script,. . a.sh finda a.sh en recherchant les directorys dans la variable d'environnement PATH .


Il y a quelques subtilités dans la façon dont ils se comportent, et si . et la source sont les mêmes (ou présentes du tout). . ./a.sh . ./a.sh se comportera certainement de la même manière dans chaque shell compatible POSIX, mais source et . , et . a.sh . a.sh et . ./a.sh . ./a.sh , peut varier. Pour la source Bash et . sont les mêmes dans tous les cas; pour la source zsh vérifie toujours le directory en cours ; ksh est essentiellement similaire.

Si le nom du script est donné en tant que path (contenant un / ), ce path est utilisé directement dans tous les cas. La chose la plus fiable et la plus fiable est de . ./script . ./script ou . /path/to/script . /path/to/script .