シェル変数の変更を元に戻すには?

シェル変数の変更を元に戻すには?

実験的な目的で...

私がこれをやっているとしましょう。

bash="unset DISPLAY; export DISPLAY"

したがって、未定義の状態にすることができますDISPLAY。元の設定値を復元する方法は?それとも、少なくともそれが何であるかを知っていますか?

答え1

通常、事前に書き留めておくことをお勧めします。

理論的には、この質問をする場合は、変更する前に以前の値を別の場所に保存してから、必要に応じて元に戻すことができます。

あなたが今壊れていて何かがあなたを救うことを望んでいるので、この質問をした場合、悪いニュースがあります…

答え2

これを行う簡単な方法があるかどうかはわかりません(たとえば、cd -最近のコマンド間で前後に移動します)。cd

このような背景は..自動的に有効にしますか?私はこれがどのシェルの機能なのかわかりません。

確実な解決策は、変数を変更する前に明示的に保存してから後で復元することです。 VENDOR環境変数を例にしてみましょう。

$ echo $VENDOR
intel

元の値を保存します。

$ pre_VENDOR=$VENDOR
$ echo $pre_VENDOR
intel

新しい値を割り当てます。

$ VENDOR='Zippy'
$ echo $VENDOR
Zippy

元の値を復元します。

$ VENDOR=$pre_VENDOR
$ echo $VENDOR
intel

答え3

できません。キャンセルする余地はありません。後で値を使用するには、別の変数(またはファイルまたは目的の場所)に保存してください。

old_DISPLAY=$DISPLAY
unset DISPLAY
DISPLAY=$old_DISPLAY

環境変数なしで単一のコマンドを実行するにはenv

env -u DISPLAY emacs

また、構文を使用して、環境変数をそのコマンドにのみ指定された値にVAR=VALUE COMMAND設定することもできます。VAR

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

このように変数を設定解除することはできませんが、通常は十分であればnull値に設定できます。

また、サブシェルのローカル変更を維持することもできます。括弧は、サブシェルで実行されるコマンドを区切ります。

$ 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

さまざまな環境で別々のシェルを実行できます。親シェルに戻るには、exitまたはCtrl+と入力します。D

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

関連情報