Como obter um ambiente limpo em um shell ksh?

6

Eu preciso me livrar de todas as variáveis de ambiente em um shell Ksh. Eu posso bifurcar uma nova instância, mas inevitavelmente irá fornecer alguns arquivos init (tanto quanto eu sei .profile , .kshrc ). Existe uma maneira de ignorar o fornecimento desses arquivos e qualquer outro arquivo que possa ser lido no momento do init?

  • Versão do Ksh: Versão M-11/16 / 88i
  • SO: Solaris 10

Espero que eu esteja claro o suficiente.

    
por rahmu 02.11.2011 / 15:45

2 respostas

7

~/.profile é lido apenas por shells de login. ~/.kshrc é executado apenas para shells interativos.

O env do Solaris suporta a sintaxe (agora obsoleta, mas retida no Solaris, que leva a sério a compatibilidade com versões anteriores) env - /path/to/command para executar /path/to/command em um ambiente vazio. Portanto, env - /usr/bin/ksh -c /path/to/script executará o script em um ambiente vazio e não fornecerá nenhum script de perfil. O Ksh pode definir algumas variáveis de ambiente por sua própria iniciativa: Eu não sei sobre o ksh88, mas o ksh93 define _ e PWD e pdksh define _ e PATH .

Você pode seletivamente ou indiscriminadamente limpar as variáveis de ambiente de dentro do ksh.

unset x
for x in $(typeset +x); do
  unset $x
done
    
por 02.11.2011 / 22:42
4
me@local:~ $ env - /path/to/shell
$ env
_=/usr/bin/env
PATH=/usr/bin:/bin
RANDOM=24395
$

Notas:

  • Eu usei um shell para dar uma olhada no ambiente resultante, qualquer comando pode ser usado (adivinhe qual env - /usr/bin/env retorna)
  • (@ comentário do jlliagre :) env é um comando padrão POSIX.

Editar Esclareceu a resposta.

    
por 02.11.2011 / 15:51