
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 COMMAND
um die Umgebungsvariable VAR
nur 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 exit
oder 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