다음과 같이 기존의 모든 환경 변수를 무시하고 하나만 에코하고 싶습니다.
env -i <(
export foo=bar;
env
)
그러면 다음과 같이 인쇄됩니다.
foo=bar
그러나 건설
env -i <()
내 직감이 작동해야 한다고 말하지만 작동하지 않는 것 같습니다. env -i를 실행할 인라인 프로그램을 여기서 어떻게 만들 수 있습니까?
답변1
env에 실제 프로그램을 제공하십시오.
env -i bash -c '
export foo=bar
env
'
이는 $PATH
환경 변수 도 제거하므로 bash
시스템의 기본 명령 검색 경로에 없으면 작동하지 않습니다.
bash
통역사를 전달하기 전에 통역사의 경로를 찾아볼 수 있습니다 env
.
env -i -- "$(command -v bash)" -c '
export foo=bar
env
'
시작하는 쉘에서 bash
명령을 찾는 데 동일한 문제가 있을 수 있습니다 env
.
답변2
모든 변수를 내보내지 않은 상태로 서브셸에서 명령을 실행하는 것이 요점이라면 zsh에서 다음을 수행할 수 있습니다.
(
typeset +x -m '*'
those-commands
)
다른 많은 쉘과 마찬가지로 zsh는 자동으로 _
환경 변수와 실행되는 파일의 경로를 실행하는 명령에 대한 값으로 전달합니다.
이 플래그를 사용하면 쉘 변수 typeset +x -m '*'
만 내보내지지 않습니다 . x
zsh가 시작 시 수신하고 쉘 변수(예: 일부 명명된 123
, 개행 또는 ***
...)에 매핑할 수 없는 환경 변수 또는 zsh가 환경에서 가져오지 않는 환경 변수(예: $IFS
, $USERNAME
)는 명령에서 여전히 동일합니다. 환경을 실행합니다.
$ env '123=x' '***=bar' 'IFS=xyz' zsh
$ (typeset +x -m '*'; env)
_=/usr/bin/env
IFS=xyz
123=x
***=bar