Ich benutze den source
Befehl in meinem Bash-Skript, um die Variablenwerte zu lesen / drucken
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
Was ist das Gegenteil von, source
um die Variablen zu deaktivieren?
Erwartete Ergebnisse
echo $linuxmachine01
< no output >
bash
shell-script
source
Yael
quelle
quelle
source
das Festlegen der Variablen in Ihrer Umgebung, sondern dieexport
Anweisungen in der Datei, die Siesource
. Das Gegenteil vonsource
könnte also seinsource
, wenn Siesource
eine andere Datei haben, dieunset
alle die gleichen Variablen enthält.export
s absolut nicht . Alles,export
was Sie tun müssen, ist, die Werte in die Umgebung zu kopieren. Sie sind jedoch als Shell-Variablen vorhanden, unabhängig davon, ob sie auch als Umgebungsvariablen definiert sind oder nicht. Darüber hinaus verkürzt das Definieren unnötiger Umgebungsvariablen Ihre maximale Befehlszeilenlänge, da sie im selben (begrenzten!) Pro-Prozess-Bereich gespeichert werden.Antworten:
Verwenden einer Unterschale (empfohlen)
Führen Sie den Quellbefehl in einer Subshell aus:
Unterschalen werden durch Parens definiert :
(...)
. Alle innerhalb der Subshell festgelegten Shell-Variablen werden beim Ende der Subshell vergessen.Verwenden von unset
Dadurch werden alle Variablen deaktiviert, die exportiert werden von
linuxmachines_mount_point.txt
:-F'[ =]+'
Weist awk an, eine beliebige Kombination von Leerzeichen und Gleichheitszeichen als Feldtrennzeichen zu verwenden./^export/{print $2}
Dies weist awk an, Zeilen auszuwählen, die mit beginnen,
export
und dann das zweite Feld zu drucken.unset $(...)
Dadurch wird der Befehl ausgeführt
$(...)
, das Standardout erfasst und alle durch die Ausgabe benannten Variablen deaktiviert.quelle
file
eine Exportanweisung ist.Sie können
source
das Skript nicht aufheben .Was Sie tun können, ist, alle exportierten Variablen in einer temporären Datei zu speichern, sie mit Variablen zu vergleichen, nachdem das Skript bezogen wurde, und dann den Überlauf zu entfernen
unset
, z.quelle
export
s enthält .Sie können den
unset
Befehl verwenden, um Variablen zu "vergessen".quelle
Die einfachste Lösung für die erwartete Ausgabe (nichts) besteht darin, die Variable erneut als leer zu deklarieren:
Natürlich ist die Variable immer noch definiert (und exportiert), leer, aber definiert:
Um die Variable sowohl aus der Umgebung als auch aus der laufenden Shell korrekt zu entfernen, sollten Sie unset verwenden (die empfohlene Methode):
quelle
Der einfachste Weg, dies zu tun, besteht darin, Ihr Skript so zu ändern, dass es auch einen Befehl definiert, um die Wirkung des Skripts rückgängig zu machen:
quelle
declare -A linuxmachines=( [01]="sdb sdc sdf" [02]="sde sdd sdb" [03]="whatever" )
Dann ist es nurunset linuxmachines
zum Zurücksetzen.Sie können Ihre linuxmachines_mount_point.txt so schreiben
Wenn Sie Ihre Variablen benötigen
Wenn Sie die Variablen entfernen möchten
quelle
Wenn Sie den
source
Befehl zum Aktivieren von a verwendenVirtualEnvironment
, können Sie ihn mit dem Befehl beendendeactivate
.quelle