Wie kann ich die Änderungen an der Shell-Variable wiederherstellen?

Wie kann ich die Änderungen an der Shell-Variable wiederherstellen?

Zu experimentellen Zwecken …

Angenommen, ich habe dies getan

bash="unset DISPLAY; export DISPLAY"

also kann ich undefiniert machen DISPLAY. Wie kann ich den ursprünglichen Wertesatz wiederherstellen? Oder zumindest wissen, was es war?

Antwort1

Im Allgemeinen schreiben Sie es vorher auf.

Wenn Sie dies theoretisch meinen, speichern Sie einfach den alten Wert an einer anderen Stelle, bevor Sie ihn ändern, und geben Sie ihn dann bei Bedarf wieder ein.

Wenn Sie das fragen, weil Sie jetzt in der Klemme sitzen und hoffen, dass es irgendetwas gibt, das Ihnen da raushilft, dann habe ich schlechte Neuigkeiten für Sie ...

Antwort2

Ich bin nicht sicher, ob es dafür eine einfache Möglichkeit gibt ( beispielsweise cd -um zwischen den letzten Befehlen hin und her zu wechseln ).cd

In welchem ​​Kontext geschieht dies? Soll dies automatisch verfügbar sein? Mir ist nicht bekannt, dass dies eine Funktion irgendeiner Shell ist.

Eine naheliegende Lösung wäre, die Variable explizit zu speichern, bevor Sie sie ändern, und sie später wiederherzustellen. Am Beispiel der Umgebungsvariable VENDOR:

$ echo $VENDOR
intel

Speichern Sie den ursprünglichen Wert:

$ pre_VENDOR=$VENDOR
$ echo $pre_VENDOR
intel

Weisen Sie einen neuen Wert zu:

$ VENDOR='Zippy'
$ echo $VENDOR
Zippy

Den ursprünglichen Wert wiederherstellen:

$ VENDOR=$pre_VENDOR
$ echo $VENDOR
intel

Antwort3

Das geht nicht, es gibt kein Rückgängigmachen. Speichern Sie den Wert in einer anderen Variable (oder in einer Datei oder wo immer Sie möchten), wenn Sie ihn später zur Verfügung haben möchten.

old_DISPLAY=$DISPLAY
unset DISPLAY
DISPLAY=$old_DISPLAY

Wenn Sie einen einzelnen Befehl ohne die Umgebungsvariable ausführen möchten, verwenden Sie env.

env -u DISPLAY emacs

Sie können die Syntax auch verwenden, VAR=VALUE COMMANDum die Umgebungsvariable VARnur für diesen einen Befehl auf den angegebenen Wert zu setzen.

$ echo $DISPLAY
:0
$ DISPLAY=:1 xterm & # shows the xterm window on display :1
$ echo $DISPLAY
:0

Sie können eine Variable auf diese Weise nicht löschen, Sie können sie jedoch auf einen leeren Wert setzen, was oft ausreichend ist.

Sie können Änderungen auch lokal in einer Subshell speichern. Klammern begrenzen Befehle, die in einer Subshell ausgeführt werden sollen.

$ env | grep -E 'FOO|BAR'
FOO=value_of_FOO
BAR=value_of_BAR
$ (export FOO=other_value; unset BAR; env | grep -E 'FOO|BAR')
FOO=other_value
$ env | grep -E 'FOO|BAR'
FOO=value_of_FOO
BAR=value_of_BAR

Sie können eine separate Shell mit einer anderen Umgebung ausführen. Geben Sie exitoder Ctrl+ ein D, um zur übergeordneten Shell zurückzukehren.

$ bash
$ # change the environment, change directories, etc.
$ exit
$ # now you're back to the parent shell with its environment as you left it

verwandte Informationen