Alternando para outro shell sem copiar variáveis de ambiente

2

Do tcsh, se eu tentar:

exec /home/path/to/my/zsh

funciona (eu entro em um shell Zsh)

mas se eu tentar

exec -c /home/path/to/my/zsh

Eu recebo:

-c Command not found

Como faço para mudar para o meu shell Zsh e iniciá-lo a partir de uma "placa em branco"? (isto é, sem variáveis de ambiente transferidas de tcsh ).

    
por Amelio Vazquez-Reina 11.03.2013 / 21:44

1 resposta

5

Não sei por que você quer fazer isso, mas você pode:

exec env -i /home/path/to/my/zsh

Provavelmente, muitas coisas não funcionarão corretamente, pois você perderá algumas variáveis de ambiente essenciais, como $PATH , $HOME ou $TERM .

Se você quiser colocar algumas variáveis na lista de permissões e remover o restante:

exec env -i HOME="$HOME" TERM="$TERM" /home/path/to/my/zsh

Se você quiser restaurar o ambiente no momento em que o tcsh foi iniciado, insira-o no início de ~/.tcshrc :

sh -c 'export -p' > ~/.initial-env

E então faça algo como:

exec env -i sh -c ". $HOME/.initial-env; exec /path/to/zsh"

Isso é salvar o ambiente quando tcsh for iniciado e restaurá-lo quando você executar zsh.

Se o que você quer é mudar o seu shell para zsh enquanto você não tem a possibilidade de fazer um chsh (ou zsh não está instalado ou o instalado tem 20 anos), (traz de volta memória de mais de 15 anos atrás (caramba!) quando eu estava na mesma situação (embora com csh em vez de tcsh )), você pode substituir o conteúdo de seu ~/.login com:

setenv SHELL /path/to/zsh
exec $SHELL -l

E remova seu .tcshrc

A configuração $SHELL especifica sua preferência de shell (é para isso que aplicativos como xterm ou vi ... serão iniciados quando precisarem iniciar um shell para você).

Colocá-lo no seu ~/.login deve garantir que seja feito apenas uma vez. Esperançosamente, não mais tcsh seria iniciado mais tarde durante a sua sessão de login, uma vez que você alterou $SHELL . Não importa se você colocou suas definições de variáveis de ambiente em ~/.login ou ~/.zprofile ou ~/.profile . Depende de você.

Teste com tcsh -l antes de sair.

    
por 11.03.2013 / 21:53

Tags