Alterando o shell padrão sem chsh ou privilégios de administrador

8

Eu vi o seguinte trecho neste tópico: Como mudar de csh para bash como shell padrão

sleep 2
if (-x /usr/local/bin/bash) then
  exec /bin/sh -c '. ~/.profile; exec /usr/local/bin/bash'
endif

Meu entendimento é que, se você colocar esse snippet em ~/.login , ele invocará bash quando você fizer login.

Eu tenho uma situação semelhante em que gostaria de usar um snippet semelhante para invocar uma versão do zsh que é diferente da padrão com a qual eu efetuo login. Parte da razão pela qual estou passando por esse problema é porque não posso escolher minha versão desejada de zsh nas opções permitidas em chsh e não tenho privilégios de administrador.

Com isso:

  • Como eu alteraria o snippet acima para fazer isso ao alternar entre diferentes versões do zsh?
  • Por que dois comandos exec são necessários no snippet acima? O que eles fazem? Além disso, por que o snippet acima usa sh e bash (o usuário deve fazer login com csh )
por Amelio Vazquez-Reina 11.12.2011 / 00:53

1 resposta

6

Se você deseja executar zsh em vez de bash, basta substituir /usr/local/bin/bash pelo caminho do executável zsh . Observe que esse trecho é específico para csh; se seu shell de login não for (t) csh, esse código em ~/.login não fará nada para você.

Quanto ao motivo pelo qual o trecho foi escrito dessa maneira, você teria que perguntar à pessoa que o escreveu. [verifica quem era.] Oh. Bem, se você acabou de fazer exec /usr/local/bin/bash , então você não estará iniciando um shell de login, então seu .profile não será executado. Mas isso poderia ser resolvido de forma mais simples, executando /usr/local/bin/bash --login .

Agora, se o seu shell de login não for csh, você precisará de um snippet diferente em torno de exec . Em shells ao estilo Bourne, incluindo zsh:

if [ -x ~/bin/zsh ]; then exec ~/bin/zsh; fi

Faça o exec ~/bin/zsh -l se você quiser que a nova instância do zsh leia seu ~/.zprofile . Se você fizer isso, o snippet acima deve estar em .profile ou .bash_profile ; se seu shell de login for zsh, não coloque o trecho no seu .zprofile , ou então certifique-se de que a nova instância do zsh não chamará exec novamente.

    
por 11.12.2011 / 02:49