내보낸 환경 변수가 하위 셸(bash)에서 인식/액세스되는 것을 방지하는 방법은 무엇입니까?

내보낸 환경 변수가 하위 셸(bash)에서 인식/액세스되는 것을 방지하는 방법은 무엇입니까?

따라서 내보낸 변수의 로드가 하위 셸에서 인식되는 것을 방지해야 합니다.

문제는 애플리케이션(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 somecommandsomecommand빈 환경에서 실행됩니다 . 뒤에 인수를 넣을 수 있습니다 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에서는 필터링에 적합한 한 줄에 하나의 이름이 포함된 환경 변수 목록을 생성하는 데 사용할 수 있습니다 . 다른 유닉스 변형에서도 동일한 작업을 수행하지만 일부 변수의 값에 개행 문자가 포함된 경우 거짓 긍정을 찾을 수 있다는 제한이 있습니다.VAR1VAR2somecommandenv -0 | tr '\n\0' '.\n' | sed 's/=.*//'env | sed 's/=.*//'

답변3

문제 typeset +x variable_name...또는 declare +x variable_name...명령. 와 같은 변수 이름에 정규식을 사용할 수도 있습니다 typeset +x ${!MY_VAR_*}.

관련 정보