Administração de Linux Question #019e3987
Como posso suprimir a variável de ambiente existente FOOBAR apenas para a execução do script ./myscript?
unset -v FOOBAR; ./myscript
set -a FOOBAR=""; ./myscript
env -u FOOBAR ./myscript
env -i FOOBAR ./myscript
Official Explanation / Community Explanations
Resumo
Esta questão testa a capacidade de suprimir temporariamente uma variável de ambiente para um único comando sem afetar o shell atual. A abordagem correta usa env -u para remover a variável apenas para o processo filho.
Como funciona
Variáveis de ambiente são herdadas por processos filhos. Para suprimir uma variável para um comando específico, você pode modificar o ambiente apenas para esse comando. O utilitário env executa um comando com um ambiente modificado. A opção -u remove uma variável do ambiente antes de executar o comando.
Por que a resposta correta está certa
A opção C (env -u FOOBAR ./myscript) remove corretamente a variável FOOBAR apenas para a execução de ./myscript. O ambiente do shell original permanece inalterado.
Por que as outras opções estão incorretas
- A:
unset -v FOOBAR; ./myscriptremoveFOOBARno shell atual, afetando comandos subsequentes. Não limita a alteração apenas a./myscript. - B:
set -a FOOBAR=""; ./myscriptdefineFOOBARcomo uma string vazia no shell atual e a marca para exportação, mas não a suprime; na verdade, a define como vazia, o que é diferente de remover. - D:
env -i FOOBAR ./myscriptinicia com um ambiente vazio e então defineFOOBARpara o que vier a seguir (aqui é interpretado como um comando, causando um erro). A opção-ilimpa todas as variáveis de ambiente, o que é muito abrangente.