como evitar que variáveis ​​de ambiente exportadas sejam reconhecidas/acessíveis por um shell filho (bash)?

como evitar que variáveis ​​de ambiente exportadas sejam reconhecidas/acessíveis por um shell filho (bash)?

Portanto, preciso evitar que muitas variáveis ​​exportadas sejam reconhecidas por um shell filho.

O problema é que um aplicativo (Wine + UDK) não cria projetos com muitos (> 65535) bytes no ambiente, e o meu tem muitos (95323) depois de usar um projeto (ScriptEchoColor) que compartilha variáveis ​​de ambiente entre qualquer bash cartuchos.

Não consigo encontrar um comando que me permita gerar um shell filho que não aceite variáveis ​​de ambiente atuais e, em vez disso, use apenas aquelas definidas em meu perfil de usuário e no sistema como um todo.

Eu tentei muitas opções mostradas em bash --help.

Responder1

Você pode usar o envcomando para iniciar um processo com um ambiente limpo. Aqui está um exemplo:

env -i /bin/myprog

Caso ainda precise exportar algumas variáveis, você pode fazer isso na chamada:

env -i MYVAR=foo /bin/myprog

O comando env é exigido porPOSIX.

Responder2

env -i somecommandé executado somecommandem um ambiente vazio. Você pode colocar argumentos depois somecommand. Se PATHestiver apagado, você precisará especificar o caminho completo para o arquivo somecommand. Alternativamente, você pode preservar PATHou definir um valor diferente.

env -i PATH="$PATH:/another/directory" somecommand

Se você deseja ter o mesmo ambiente que teria após o login, preserve apenas algumas variáveis ​​e carregue-as .profilepara definir o restante. Se você usar um shell de login diferente (bash with .bash_profile, csh with .login, etc.), adapte-o adequadamente.

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

Alternativamente, você pode preferir remover algumas variáveis ​​do ambiente. env -u VAR1 -u VAR2 somecommandremove VAR1e VAR2do ambiente e executa somecommand. No Linux, você pode usar env -0 | tr '\n\0' '.\n' | sed 's/=.*//'para produzir uma lista de variáveis ​​de ambiente com um nome por linha, adequado para filtragem. Em outras variantes Unix, env | sed 's/=.*//'faz o mesmo trabalho, com a limitação de poder encontrar falsos positivos se os valores de algumas variáveis ​​contiverem novas linhas.

Responder3

Emissão typeset +x variable_name...ou declare +x variable_name...comando. Você pode até usar expressões regulares para nomes de variáveis, como typeset +x ${!MY_VAR_*}.

informação relacionada