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
.