
실험의 목적으로...
내가 이런 짓을 했다고 가정해보자
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
이 방법으로 변수를 설정 해제할 수는 없지만 빈 값으로 설정할 수는 있는데, 이 방법만으로도 충분할 때가 많습니다.
또한 변경 사항을 하위 쉘에 로컬로 유지할 수도 있습니다. 괄호는 서브셸에서 수행할 명령을 구분합니다.
$ 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