터미널을 닫지 않고 모든 변수를 지우십시오


10

터미널 을 닫지 않고 명령 프롬프트에서 정의한 모든 변수를 지우는 방법을 알고 싶습니다 .

예를 들어 명령 프롬프트에서 변수를 다음과 같이 설정하면

$ a=1

이제 $a터미널을 닫지 않고 변수 (및 유사한 방식으로 정의 된 많은 다른 변수) 를 삭제하고 싶습니다 . 나는 사용할 수 unset있지만 큰 아니오가 있으면 열심 할 것입니다. 변수


2
exec "$0"어쩌면-그러나 당신이 global에 의해 당신이 무엇을 의미하는지 말하기는 어렵다 .
mikeserv

3
왜 그렇게 하시겠습니까?
Hauke ​​Laging

1
@HaukeLaging 스크립트를 사용하여 배열로 작업하고 있습니다. 때때로 하나의 요소를 추가합니다. 때문에 이전 값으로 스크립트를 실행할 수 없습니다 (배열이 변경되었으므로). 터미널을 닫고 새 세션을 다시 시작해야합니다. 나는 분명히하기를 바랍니다. 알려주세요 :)
에드워드 Torvalds

1
@muru- $varwith var=$(declare -p +F);로 저장된 목록 을 가져온 다음 해당 함수에 대한 인수로 해당 목록 을 전달합니다 echo "${2%%=*}"..
mikeserv

3
나는 당신이 무엇을하려고하는지 전혀 모른다. 대화식 쉘이나 스크립트에 대해 이야기하고 있습니까? 대화식 쉘에서 실행 된 스크립트에 설정된 변수는 상위 쉘에 영향을 미치지 않습니다. 추구하고있는 막 다른 골목이 아니라 달성하고자하는 것을 말씀해주십시오 .
Gilles 'SO- 악마 중지

답변:


10

그렇게하면 (GNU coreutils)

exec env --ignore-environment /bin/bash

당신은 신선하고 새로운 환경을 사용할 것입니다


무엇에 대해 exec "$0"?
Edward Torvalds

@edwardtorvalds $0는 실행 된 쉘에 대한 0 번째 인수입니다. 그래서, 당신이 실행하는 경우가 bash $0있습니다 bash (- 그것은 수 있습니다 아마 -bashA의 -l버전에 따라 ogin 쉘의 경우) . #!/bin/bashBangline 으로 스크립트를 실행하는 경우 스크립트 $0경로입니다. exec "$0"아마도 더 유연하지만 exec bash더 명시 적입니다. 터미널에서 해당 명령을 입력 할 경우, bash이 대화 형 환경에서의 인식에 해당해야 bash -i- 당신 얻을 것이다 ~/.bashrc파일 실행도합니다.
mikeserv

이것은 도움이되지 않습니다 export a=123, 그 변수는 상속됩니다 ...
stimur

1

envGNU coreutils (일반적으로 GNU / Linux 시스템에 사전 설치되어 있음)에서 제공하는을 사용할 수 있습니다 .

exec env --ignore-environment /bin/bash

exec 시스템 호출은 현재 프로세스가 환경 친화적 인 새로운 셸 버전으로 대체되도록합니다.

이는 내 보낸 환경 변수 도 지우는 이점이 있습니다 .


그러나 이것은 수정 된 PATH 변수를 지울 것입니다 export PATH=$PATH:~/foo.
Edward Torvalds 19 :

네 말이 맞아 쉘의 절대 경로가 $ 0 대신 사용되도록 대답을 수정했습니다.
user30747

user30747 덕분에 올바른 광산에 대한 답변을 훔쳤습니다. 허용 된 답변을 삭제할 수 없습니다
Gilles Quenot
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.