답변:
당신은 이것을 할 수 있습니다 env
:
env -i your_command
반대로 아래의 의견에,이 수행 환경 밖으로 완전히 명확하지만, 방해하지 않는 your_command
새 변수를 설정. 특히, 셸을 실행하면가 실행되고 셸 /etc/profile
에도 일부 내장 설정이있을 수 있습니다.
다음을 통해 확인할 수 있습니다.
env -i env
즉, 환경을 닦은 다음 인쇄하십시오. 출력이 공백입니다.
echo 'echo $PATH' > test.sh && chmod u+x test.sh && env -i test.sh
prints /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
.
PATH
, PWD
그리고 SHLVL
배쉬에 의해 자동으로 설정됩니다. +1.
env -i bash --norc -c "declare -p PATH"
합니다 declare -- PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
. 직접 내보내는 경우 내 보낸 (및 환경의 일부) "-x"에 유의하십시오. env -i bash --norc -c "export PATH; declare -p PATH"
제공declare -x PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
"깨끗한" bash
환경은
$ env -i bash --noprofile --norc
env -i
명령은 실행 프로그램의 환경 이전 셀 환경의 수출 환경 변수 중 하나를 전송하지 않고 커맨드 라인에 주어진 명령을 실행한다.
이 --noprofile
옵션 bash
은 로그인 쉘에 대해 읽히는 시스템 전체 또는 개인 쉘 초기화 스크립트 읽기를 중지합니다 .
이 --norc
옵션 bash
은 대화식 쉘에 대해 읽히는 개인 쉘 초기화 스크립트 읽기를 중지합니다 .
env -i
않습니까? 어떤 시스템을 사용하고 있습니까?
env
내 환경을 청소하고 --noprofile
/ etc / profile과 친구들의 --norc
소싱을 피하고 ~ / .bashrc와 친구들의 소싱을 피하기 위해.
env -i somecommand
ams가 이미 언급했듯이 빈 환경에서 명령을 실행합니다 .
많은 프로그램이 몇 가지 중요한 환경 변수에 의존하므로이를 유지하고자 할 수 있습니다.
env -i HOME="$HOME" LC_CTYPE="${LC_ALL:-${LC_CTYPE:-$LANG}}" PATH="$PATH" USER="$USER" somecommand
또는 작은 로그인 시간 환경에 로그인 할 수 있습니다.
ssh localhost somecommand
env
는 --
구분을 지원하지 않으며 env -i FOO=bar -- env
라는 이름의 명령을 실행하려고 시도합니다 --
.
env -i -- FOO=bar env
실제로 이어야합니다 . 내 잘못이야. 그 --
뒤에 오는 것이로 시작하지 않기 때문에 유용하지 않습니다 -
.
허용되는 답변은 정확하지만 일반적으로 수행하려는 작업은 다음과 같습니다.
env -i bash -l -c "printenv; and any other commands"
이것은 당신에게 베어지만 기능적인 bash를 제공합니다 (비 대화식 모드로 로그인 할 때와 동일). 예를 들어 언어, 시간대, HOME 등을 설정합니다.
env -i
clears 때문에 제대로 작동하지 않습니다. 즉 HOME
, 등을 bash -l
찾을 수 없습니다 .bash_profile
. 새로 로그인 할 때와 같은 쉘을 원한다면 HOME
먼저 추가 간접 설정이 필요합니다 .
여기에 대부분의 답변이있는 문제는 env -i
지워 HOME
지므로 bash -l
내부에서 실행하더라도 .bash_profile
등을 읽지 못합니다 . 찾고있는 것이 새로 로그인 한 것처럼 행동하는 쉘이라면 대신에 이것을 원할 것입니다 :
env -i HOME="$HOME" bash -l -c 'your_command'
예:
$ export ABC=123
$ env -i HOME="$HOME" bash -l -c 'env' | grep ABC
$ env HOME="$HOME" bash -l -c 'env' | grep ABC
ABC=123
bash
쉘이 실행됩니다 .bash_login
나 .bash_profile
. 깨끗한 환경을 얻으려면을 사용 --noprofile
하거나 HOME
해당 파일이없는 디렉토리로 설정 하십시오. 나는 그것이 당신이 "깨끗한"의 의미에 달려 있다고 생각합니다.
env -i bash -c ...
. 이 대답은 특히 컴퓨터에서 새로 로그인 한 것처럼 보이는 쉘을 원할 때입니다.
balki의 의견에 답하고 프로세스에서 내 자신의 질문에 대답하려면 :-) :
% echo Environment in calling shell: vars: $(env |wc -l); echo; ./du; echo; cat du
Environment in calling shell: vars: 43
==> This is the environment: vars: 5
PATH="$PATH"
PWD=/Users/nick
SHLVL=1
SOMETHING_TO_KEEP="$USER"
_=/usr/bin/env
==> The end.
#!/usr/bin/env -i SOMETHING_TO_KEEP="$USER" PATH="$PATH" /bin/sh
echo "==> This is the environment: vars:" $(/usr/bin/env | /usr/bin/wc -l)
/usr/bin/env
echo "==> The end."
/usr/bin/env: invalid option -- ' ' Try '/usr/bin/env --help' for more information.
--ignore-environment
다음과 같은 결과를 얻습니다./usr/bin/env: unrecognized option '--ignore-environment SOMETHING_TO_KEEP="$USER" PATH="$PATH" /bin/sh' Try '/usr/bin/env --help' for more information.