実験的な目的で...
私がこれをやっているとしましょう。
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