J'ai plusieurs comptes Amazon EC2 et je veux pouvoir rapidement changer de variables, telles que $EC2_HOME
, à l'aide d'un script.
J'ai un script shell configuré comme ceci:
#!/bin/sh
export EC2_HOME=/home/me/.ec2
echo $EC2_HOME
Lorsque je lance le script, je sais que EC2_HOME
c'est défini, mais je pensais que l'utilisation export
ferait en sorte que la variable reste fidèle une fois le script terminé. Ça ne marche pas, car courir echo $EC_HOME
ne montre rien.
Je sais que ce 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 - alors je m'excuse s'il s'agit d'un doublon.
.
ousource
, vous ne créez pas de nouveau processus enfant, vous exécutez les commandes dans le shell actuel..
ousource
. Pourquoi cela arrive-t-il ?exit
déclaration, il n'est donc pas approprié de l'obtenir.source ./script
fonctionne parfaitement bien,sudo source ./script.sh
ditsudo: source: command not found
. Comment puis-je faire cela en utilisant sudo?sudo
et en fonction des paramètres de configuration,/etc/sudoers
vous pouvez ou non conserver votre environnement lorsque vous exécutez des commandes avecsudo
. Je vous suggère d'essayer de source votre script, puis d'exécuter l' optionsudo
avec-E
pour préserver l'environnement. Si cela ne fonctionne pas, je suppose que vous pouvez très peu faire.Lorsque vous exécutez un script, il obtient son propre shell et son propre environnement, qui disparaissent dès que le script est terminé. Pour conserver les variables d'environnement, sourcez le script dans votre shell actuel:
ou de manière équivalente (mais un peu plus portable), utilisez la commande POSIX :
Ensuite, les définitions seront placées dans l'environnement de votre shell actuel et seront héritées par tous les programmes que vous lancerez à partir de celui-ci.
Pour être plus proche de l'exécution d'un script,
. a.sh
trouvez a.sh en cherchant dans les répertoires de laPATH
variable d'environnement.Il y a quelques subtilités dans leur comportement, et si
.
etsource
sont identiques (ou présents).. ./a.sh
se comportera certainement de la même manière dans chaque shell compatible POSIX, maissource
et.
, et,. a.sh
et. ./a.sh
, peuvent varier. Pour Bashsource
et.
sont les mêmes dans tous les cas; for zshsource
vérifie toujours d'abord le répertoire courant ; ksh est essentiellement similaire.Si le nom du script est donné sous forme de chemin (contenant un
/
), ce chemin est utilisé directement dans tous les cas. La chose la plus fiable à faire est. ./script
ou. /path/to/script
.la source
Juste pour l'enregistrement.
Si vous voulez exécuter un script à partir d’Internet qui exporte env au système
vous pouvez utiliser le format suivant
Par exemple:
la source