J'utilise la source
commande dans mon script bash pour lire / imprimer les valeurs des variables
more linuxmachines_mount_point.txt
export linuxmachine01="sdb sdc sdf sdd sde sdg"
export linuxmachine02="sde sdd sdb sdf sdc"
export linuxmachine03="sdb sdd sdc sde sdf"
export linuxmachine06="sdb sde sdf sdd"
source linuxmachines_mount_point.txt
echo $linuxmachine01
sdb sdc sdf sdd sde sdg
Quel est le contraire source
pour désarmer les variables?
Résultats attendus
echo $linuxmachine01
< no output >
bash
shell-script
source
Yael
la source
la source
source
cela qui définit les variables dans votre environnement, mais lesexport
instructions dans le fichier que voussource
. Donc, l'opposé desource
pourrait êtresource
, si vous avezsource
un fichier différent quiunset
contient toutes les mêmes variables.export
. Ilexport
suffit de copier les valeurs dans l'environnement - mais elles sont présentes en tant que variables shell, qu'elles soient ou non définies comme variables d'environnement également. De plus, la définition de variables d'environnement inutiles raccourcit la longueur maximale de votre ligne de commande, car elles sont stockées dans le même espace (limité!) Par processus.Réponses:
Utilisation d'un sous-shell (recommandé)
Exécutez la commande source dans un sous-shell:
Sous - couches sont définies par parens:
(...)
. Toutes les variables de shell définies dans le sous-shell sont oubliées à la fin du sous-shell.Utiliser unset
Cela supprime toute variable exportée par
linuxmachines_mount_point.txt
:-F'[ =]+'
indique à awk d'utiliser n'importe quelle combinaison d'espaces et de signes égaux comme séparateur de champ./^export/{print $2}
Cela indique à awk de sélectionner les lignes commençant par
export
puis d'imprimer le deuxième champ.unset $(...)
Cela exécute la commande à l'intérieur
$(...)
, capture sa sortie standard et désactive toutes les variables nommées par sa sortie.la source
file
est une déclaration d'exportation.Vous ne pouvez pas annuler
source
le script.Ce que vous pouvez faire est de stocker toutes les variables exportées dans un fichier temporaire, de les comparer avec des variables après la source du script, puis de supprimer le débordement avec
unset
, par exemple:la source
export
s.Vous pouvez utiliser la
unset
commande pour "oublier" les variables.la source
La solution la plus simple pour obtenir la sortie que vous attendez (rien) est de déclarer à nouveau la variable comme vide:
Bien sûr, la variable est toujours définie (et exportée), vide mais définie:
Pour supprimer correctement la variable de l'environnement et du shell en cours d'exécution, vous devez utiliser unset (la manière recommandée):
la source
La façon la plus simple de le faire est de modifier votre script afin qu'il définisse également une commande pour annuler l'effet du script:
la source
declare -A linuxmachines=( [01]="sdb sdc sdf" [02]="sde sdd sdb" [03]="whatever" )
alors c'est justeunset linuxmachines
pour revenir.Vous pouvez écrire votre linuxmachines_mount_point.txt comme ceci
Quand vous avez besoin de vos variables
Lorsque vous souhaitez supprimer les variables
la source
Si vous utilisez la
source
commande pour activer unVirtualEnvironment
, vous pouvez le quitter à l'aide de la commandedeactivate
.la source