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

5

Portanto, preciso impedir que cargas de variáveis exportadas sejam reconhecidas por um shell filho.

O problema é que uma aplicação (Wine + UDK) não irá construir projetos com muitos (> 65535) bytes no ambiente, e o meu tem muito (95323) depois de usar um projeto (ScriptEchoColor) que compartilha ambiente variáveis entre quaisquer shells bash.

Não consigo encontrar um comando que permita gerar um shell filho que não aceite variáveis de ambiente atuais e, em vez disso, use apenas os que estão definidos no meu perfil de usuário e no sistema como um todo. / p>

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

    
por Aquarius Power 01.10.2013 / 00:01

3 respostas

6

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

env -i /bin/myprog

Se você ainda precisar exportar algumas variáveis, poderá fazê-lo na chamada:

env -i MYVAR=foo /bin/myprog

O comando env é exigido por POSIX .

    
por 01.10.2013 / 00:24
2

env -i somecommand runs somecommand em um ambiente vazio. Você pode colocar argumentos depois de somecommand . Se PATH for apagado, você precisará especificar o caminho completo para somecommand . Como alternativa, você pode preservar PATH ou definir um valor diferente.

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

Se você quiser ter o mesmo ambiente que você teria após o login, preserve apenas algumas variáveis e carregue seu .profile para definir o restante. Se você usar um shell de login diferente (bash com .bash_profile , csh com .login , etc.), adapte-se de acordo.

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

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

    
por 02.10.2013 / 02:58
0

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

    
por 25.08.2015 / 10:56