내보낸 환경 변수가 서브쉘(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 대 .bash_profilecsh .login등)을 사용하는 경우 그에 맞게 조정하세요.

env -i HOME="$HOME" PATH=/usr/local/bin:/usr/bin:/bin USER="$USER" \
    sh -c '. ~/.profile; "$@"' _ somecommand

또는 환경에서 일부 변수를 제거하는 것이 좋습니다. 환경에서 env -u VAR1 -u VAR2 somecommand제거 및 실행 VAR1Linux에서는 필터링에 적합한 한 줄에 하나의 이름으로 환경 변수 목록을 생성하는 데 사용할 수 있습니다. 다른 UNIX 변형에서도 동일한 작업을 수행하지만 일부 변수의 값에 개행 문자가 포함된 경우 거짓 긍정을 찾을 수 있다는 제한이 있습니다.VAR2somecommandenv -0 | tr '\n\0' '.\n' | sed 's/=.*//'env | sed 's/=.*//'

답변3

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

관련 정보