따라서 내보낸 변수의 로드가 하위 셸에서 인식되는 것을 방지해야 합니다.
문제는 애플리케이션(Wine+UDK)이 환경에 너무 많은(>65535) 바이트가 있는 프로젝트를 빌드하지 않는다는 것이고, 내 프로젝트는 bash 간에 환경 변수를 공유하는 프로젝트(ScriptEchoColor)를 사용한 후에 많은(95323) 바이트를 갖게 된다는 것입니다. 껍질.
현재 환경 변수를 허용하지 않고 대신 내 사용자 프로필과 시스템에 전체적으로 설정된 변수만 사용하는 하위 셸을 생성할 수 있는 명령을 찾을 수 없습니다.
에 표시된 많은 옵션을 시도했습니다 bash --help
.
답변1
명령 을 사용하여 env
깨끗한 환경에서 프로세스를 시작할 수 있습니다. 예는 다음과 같습니다.
env -i /bin/myprog
여전히 일부 변수를 내보내야 하는 경우 호출에서 그렇게 할 수 있습니다.
env -i MYVAR=foo /bin/myprog
env 명령은 다음에서 필요합니다.POSIX.
답변2
env -i somecommand
somecommand
빈 환경에서 실행됩니다 . 뒤에 인수를 넣을 수 있습니다 somecommand
. 이 지워진 경우에는 PATH
전체 경로를 지정해야 합니다 somecommand
. 또는 PATH
다른 값을 유지하거나 설정할 수 있습니다.
env -i PATH="$PATH:/another/directory" somecommand
로그인 후와 동일한 환경을 유지하려면 몇 가지 변수만 유지하고 로드하여 .profile
나머지를 설정하세요. 다른 로그인 셸(bash with .bash_profile
, csh with .login
등)을 사용하는 경우 이에 맞게 조정하세요.
env -i HOME="$HOME" PATH=/usr/local/bin:/usr/bin:/bin USER="$USER" \
sh -c '. ~/.profile; "$@"' _ somecommand
또는 환경에서 일부 변수를 제거하는 것을 선호할 수도 있습니다. 환경에서 및 를 env -u VAR1 -u VAR2 somecommand
제거 하고 실행합니다 . Linux에서는 필터링에 적합한 한 줄에 하나의 이름이 포함된 환경 변수 목록을 생성하는 데 사용할 수 있습니다 . 다른 유닉스 변형에서도 동일한 작업을 수행하지만 일부 변수의 값에 개행 문자가 포함된 경우 거짓 긍정을 찾을 수 있다는 제한이 있습니다.VAR1
VAR2
somecommand
env -0 | tr '\n\0' '.\n' | sed 's/=.*//'
env | sed 's/=.*//'
답변3
문제 typeset +x variable_name...
또는 declare +x variable_name...
명령. 와 같은 변수 이름에 정규식을 사용할 수도 있습니다 typeset +x ${!MY_VAR_*}
.