Executando shell script sem variáveis ​​ambientais

17

Como eu sei, o script shell recém-executado herda suas variáveis ​​de ambiente. Existe uma maneira de bloquear isso? (shell em execução sem herança de variável)

Eonil
fonte

Respostas:

21

Parece que você pode prefixar seu script com o env -iqual limpará o ambiente antes de executar o script:

env -i sh test.sh

De man env:

-i, --ignore-environment
              start with an empty environment

Não sei por que você gostaria de fazer isso ...

vmfarms
fonte
Obrigado. Isso funcionou! Eu preciso disso para chamar o script de construção no IDE sem influenciar as variáveis ​​ambientais de configuração do IDE. Mas ainda está longe do objetivo. Isso pode ajudar a sua curiosidade!
Eonil
Para adicionar outro caso de uso: Atualmente, estou avaliando fish e zsh como uma alternativa ao bash. Mas não estou pronto para promover o shell candidato como meu shell de login (como em chsh .... Se eu abrir uma janela de terminal e executar zshou fish(com ou sem -l, não importa), poluirá meu ambiente com todos os tipos de variáveis ​​do shell Eu comecei fazendo o truque com. env -cresolve este problema para mim que eu faço. env -i TERM=xterm-256color $(which fish).
Paidhi
Isso é útil se você tiver uma tarefa cron que está falhando porque o ambiente não está configurado corretamente e você precisa testá-la; também é uma boa maneira de testar se seus scripts fazem suposições sobre as configurações do ambiente. Obrigado!
razzed
Outro local possível em que isso pode ser útil é testar alguns trabalhos periódicos (como trabalhos cron) para garantir que não haja dependências ambientais no script. O mesmo ocorre com os comandos que seriam executados em um recurso "Exec" em um manifesto de fantoche.
TommyTheKid
1

Uma possibilidade (embora pareça bastante feia):

exec -c $SCRIPTiniciará $ SCRIPT com um ambiente vazio. (consulte a man bashpesquisa exec \[-cl\]).

pesado
fonte
1
Isso funcionou quase igualmente com env -i, no entanto, eu escolhi usar env -i porque exec para de executar o restante do script.
Eonil
-1

Tanto quanto eu sei, a resposta é "Não". Você pode substituir variáveis ​​ambientais no próprio script. O valor da variável de ambiente deve voltar ao valor original assim que o script terminar de ser executado. Você provavelmente precisará executar o script como um processo filho: $ this.script.sh e para evitar ter que sair do shell sempre que executar o script para redefinir as variáveis ​​de ambiente para o valor original.

Editar:

De um pôster anterior, parece que estou errado sobre isso não ser possível.

user53079
fonte