
Com o propósito de um experimento...
Suponha que eu fiz isso
bash="unset DISPLAY; export DISPLAY"
para que eu possa tornar DISPLAY
indefinido. Como posso restaurar o conjunto de valores original? Ou pelo menos sabe o que era?
Responder1
Em geral você anota com antecedência.
Se você está perguntando sobre isso em teoria, simplesmente armazene o valor antigo em outro lugar antes de modificá-lo e coloque-o de volta quando quiser.
Se você está perguntando sobre isso porque agora está ferrado e espera que haja algo que irá salvá-lo, então tenho más notícias para você...
Responder2
Não tenho certeza se existe uma maneira fácil de fazer isso (como cd -
alternar entre cd
os comandos mais recentes, por exemplo)
Qual é o contexto para fazer isso. Você deseja que isso esteja disponível automaticamente? Não estou ciente disso como um recurso de nenhum shell.
Uma solução óbvia seria salvar explicitamente a variável antes de alterá-la e depois restaurá-la. Usando a variável de ambiente VENDOR como exemplo:
$ echo $VENDOR
intel
Salve o valor original:
$ pre_VENDOR=$VENDOR
$ echo $pre_VENDOR
intel
Atribua um novo valor:
$ VENDOR='Zippy'
$ echo $VENDOR
Zippy
Restaure o valor original:
$ VENDOR=$pre_VENDOR
$ echo $VENDOR
intel
Responder3
Você não pode, não há como desfazer. Salve o valor em outra variável (ou em um arquivo ou onde quiser) se quiser disponibilizá-lo posteriormente.
old_DISPLAY=$DISPLAY
unset DISPLAY
…
DISPLAY=$old_DISPLAY
Se você quiser executar um único comando sem a variável de ambiente, use env
.
env -u DISPLAY emacs
Você também pode usar a sintaxe VAR=VALUE COMMAND
para definir a variável de ambiente VAR
com o valor especificado apenas para este comando.
$ echo $DISPLAY
:0
$ DISPLAY=:1 xterm & # shows the xterm window on display :1
$ echo $DISPLAY
:0
Você não pode cancelar a definição de uma variável dessa maneira, mas pode configurá-la para um valor vazio, o que geralmente é bom o suficiente.
Você também pode manter as alterações locais em um subshell. Os parênteses delimitam os comandos a serem executados em um subshell.
$ 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
Você pode executar um shell separado com um ambiente diferente. Digite exit
ou Ctrl+ Dpara retornar ao shell pai.
$ bash
$ # change the environment, change directories, etc.
$ exit
$ # now you're back to the parent shell with its environment as you left it