Afin d'exporter la variable VAR en premier lieu, la manière la plus logique et la plus logique de travailler est de trouver la source de la variable :
. ./export.bash
ou
source ./export.bash
Maintenant, lorsque l'on fait un écho depuis le shell principal, cela fonctionne :
echo $VAR
HELLO, VARIABLE
Nous allons maintenant réinitialiser la VAR :
export VAR=""
echo $VAR
Maintenant nous allons exécuter un script pour sourcer la variable puis la dévalider :
./test-export.sh
HELLO, VARIABLE
--
.
Le code : fichier test-export.sh
#!/bin/bash
# Source env variable
source ./export.bash
# echo out the variable in test script
echo $VAR
# unset the variable
unset VAR
# echo a few dotted lines
echo "---"
# now return VAR which is blank
echo $VAR
Voici un moyen :
Veuillez noter : Les exportations sont limitées au script qui exécute les exportations dans votre console principale - donc, dans la mesure où un cron job Je l'ajouterais à la console comme ci-dessous... pour la partie commande toujours discutable : voici comment vous l'exécuteriez depuis votre shell :
Sur votre invite de commande (tant que le fichier export.bash fichier a plusieurs valeurs d'écho)
IFS=$'\n'; for entries in $(./export.bash); do export $entries; done; ./v1.sh
HELLO THERE
HI THERE
Fichier cat v1.sh
#!/bin/bash
echo $VAR
echo $VAR1
Maintenant, tant que c'est pour votre usage - vous pourriez rendre les variables disponibles pour vos scripts à tout moment en faisant un alias Bash comme ceci :
myvars ./v1.sh
HELLO THERE
HI THERE
echo $VAR
.
Ajoutez ceci à votre [fichier .bashrc](https://en.wikipedia.org/wiki/Bash(Unix_shell)#Legacy-compatible_Bash_startupexample) :
function myvars() {
IFS=$'\n';
for entries in $(./export.bash); do export $entries; done;
"$@";
for entries in $(./export.bash); do variable=$(echo $entries|awk -F"=" '{print $1}'); unset $variable;
done
}
Source : votre .bashrc et vous pouvez faire ce qui précède à tout moment...
Bref, revenons au reste...
Cela l'a rendu disponible globalement puis a exécuté le script...
Il suffit d'en faire l'écho et de lancer l'exportation sur l'écho !
Fichier export.bash
#!/bin/bash
echo "VAR=HELLO THERE"
Maintenant dans script ou votre console exécutez :
export "$(./export.bash)"
Essayez :
echo $VAR
HELLO THERE
Valeurs multiples tant que vous savez ce que vous attendez dans un autre script utilisant la méthode ci-dessus :
Fichier export.bash
#!/bin/bash
echo "VAR=HELLO THERE"
echo "VAR1=HI THERE"
Fichier test-export.sh
#!/bin/bash
IFS=$'\n'
for entries in $(./export.bash); do
export $entries
done
echo "round 1"
echo $VAR
echo $VAR1
for entries in $(./export.bash); do
variable=$(echo $entries|awk -F"=" '{print $1}');
unset $variable
done
echo "round 2"
echo $VAR
echo $VAR1
Maintenant, les résultats
./test-export.sh
round 1
HELLO THERE
HI THERE
round 2
.
Et la dernière mise à jour finale pour l'auto-assignation, lisez les VARIABLES :
./test-export.sh
Round 0 - Export out then find variable name -
Set current variable to the variable exported then echo its value
$VAR has value of HELLO THERE
$VAR1 has value of HI THERE
round 1 - we know what was exported and we will echo out known variables
HELLO THERE
HI THERE
Round 2 - We will just return the variable names and unset them
round 3 - Now we get nothing back
Le script :
Fichier test-export.sh
#!/bin/bash
IFS=$'\n'
echo "Round 0 - Export out then find variable name - "
echo "Set current variable to the variable exported then echo its value"
for entries in $(./export.bash); do
variable=$(echo $entries|awk -F"=" '{print $1}');
export $entries
eval current_variable=\$$variable
echo "\$$variable has value of $current_variable"
done
echo "round 1 - we know what was exported and we will echo out known variables"
echo $VAR
echo $VAR1
echo "Round 2 - We will just return the variable names and unset them "
for entries in $(./export.bash); do
variable=$(echo $entries|awk -F"=" '{print $1}');
unset $variable
done
echo "round 3 - Now we get nothing back"
echo $VAR
echo $VAR1
1 votes
Vous pourriez essayer d'utiliser un alias au lieu d'un script pour définir votre variable.
0 votes
Le script sur lequel je travaille, est une sorte de gestionnaire virtuel java, je fais quelques calculs alors je devrais exporter un $JAVA_HOME à l'env, et l'ajouter à PATH.
0 votes
Vous pourriez écrire les informations dans un fichier et les relire ensuite, mais le sourcing semble beaucoup plus facile.
17 votes
Les processus enfants ne peuvent pas modifier l'environnement de leur parent. Le parent doit choisir de s'altérer lui-même (soit avec la fonction
source
oeval
ou ...)0 votes
Merci @glennjackman , je finis par envelopper les commandes dans une fonction et la source de .bash_profile .
0 votes
Duplicata possible de Variables d'environnement global dans un shell script.
2 votes
Pour en savoir plus sur la source,
man source
ne fonctionnera pas parce quesource
est intégré dans bash, vous devez exécuterhelp source
0 votes
@peter - Wow. Je ne peux pas croire que j'ai utilisé
bash
depuis plus d'une décennie et c'est la première fois que j'entends parler dehelp
.0 votes
L'aide de @ArtWarfare fonctionne également comme une référence pour les constructions shell courantes telles que if, for...etc.