chsh não muda $ SHELL

9

Estou com algumas dificuldades para alterar o valor do $SHELLaplicativo iTerm do OSX. O iTerm está começando /bin/zsh, mas o valor de $SHELLnão parece mudar.

O que eu fiz:

  1. "Comando" alterado como /bin/zshna janela de configuração do iTerm.
  2. Executado chshpara alterar o shell para /bin/zsh.
  3. O iTerm confirmado foi iniciado em /bin/zsh

NOTA 1: No aplicativo de terminal de ações da OSX, "Terminal.app":

echo $SHELL
/bin/zsh

NOTA 2: No popular aplicativo de terminal do OSX, "iTerm.app":

$ echo $SHELL
/bin/bash

$ echo $USER
$ melvkim

$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made
melvynkim
fonte
11
Você já olhou /etc/shells? O manual declara que, se o shell que você especificar não estiver nesse arquivo, ele não será considerado um shell padrão.
Bob Dalgleish

Respostas:

5

O problema foram as configurações conflitantes do aplicativo "iTerm" com o shell. Para resolver, redefinii o comando "login shell" na janela de preferências do iTerm:

iTerm.app -> Preferências -> Perfis -> Geral -> Comando -> Clique em "Login shell"

Então, eu executei chshpara modificá-lo como /bin/zsh.

Para reproduzir o problema (com $ SHELL definido como /bin/bash/, mesmo que o shell de logon esteja /bin/zsh), basta alterar a configuração "iTerm" para "Comando: / bin / zsh /".

melvynkim
fonte
1

O -ssinalizador chshapenas tenta alterar o shell e provavelmente falha devido ao Open Directory: O sistema UNIX usual 'chsh' modificaria a /etc/passwdentrada. No entanto, pude executar chshsem argumentos, o que me deu um editor e as seguintes informações:

# Changing user information for nevin.
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Shell: /bin/tcsh
Full Name: Nevin Williams
Office Location:
Office Phone:
Home Phone:

Consegui editar a entrada "Shell:" /bin/zshe as janelas subsequentes do Terminal se abriram com um prompt do Z-shell.

Nevin Williams
fonte
Eu tentei chshsem argumentos. Ainda sem sorte. A variável não muda. De fato, quando o editor foi carregado, ele mostrou /bin/zsh.
Melvynkim 25/05
Tente alterar o shell com o editor. Fiz uma captura de tela mudando de / bin / tcsh para / bin / zsh e vice-versa. bonmot.ca/~nevin/chsh.mov
Nevin Williams
Muito obrigado por reservar um tempo para gravar seu screencast! Sua solução deveria estar funcionando em outros emuladores de terminal, mas não era possível alterar o $SHELLiTerm. Por favor, consulte a minha resposta para mais detalhes .. Obrigado!
Melvynkim 26/05
1

Procure aqui a excelente explicação e solução postada por @ mklement0 [em relação a um bashproblema de atualização.

Eu tive um problema semelhante ao fazer o oposto no meu sistema (OS X 10.10.1): criar basho shell de login padrão novamente após a instalação oh-my-zsh, que fez zsho padrão e, em seguida, atualizar bashde 3.2.53 para 4.3.30 usando o Homebrew ( por que a Apple está enviando Yosemite com uma bashversão antiga ?).

Eu acho que a SHELLvariável de ambiente reflete, mas não controla o shell de login padrão real para o usuário. Por exemplo, se, por exemplo, bashfosse o seu padrão e você abrir uma nova bashjanela do shell do terminal, $ export SHELL="/bin/zsh"; echo "$SHELL"isso mostraria, /bin/zshmas nenhuma alteração real ocorrerá, porque se você abrir uma nova janela do shell do terminal e o fizer $ echo $0, verá -bash( $0contém o nome e o caminho do comando que iniciou a janela do shell, nesse caso bash, e o -próximo indica que é um shell de logon).

Como @ mklement0 apontou, o shell de login padrão real para o usuário é controlado pela UserShellpropriedade no registro do usuário no banco de dados interno do sistema - isso pode ser consultado e atualizado usando o utilitário de linha de comando dscl. Essas informações serão passadas para o aplicativo do terminal quando você abrir uma janela do shell.

O que chsh -s /bin/zshfaz é alterar essa UserShellpropriedade para configurá-la zsh- você pode verificar isso fazendo dscl . -read /Users/$USER/ UserShellimediatamente depois e verá UserShell: /bin/zsh. Mas a alteração não é efetuada na janela atual, até que você faça algo como exec su - $USERsugerido por @ mklement0, ou até fechar e abrir uma janela do shell.

ramius
fonte
0

Tente executar o comando: chsh -s /bin/zshno terminal Mac padrão.

mohitmayank
fonte
11
O que isso faz de diferente do OP?
JMY1000
@ JMY1000 Se você tentar executar esse comando no iTerm, as alterações não serão refletidas. Você deve conseguir fazê-lo executando-o no terminal padrão do Mac.
mohitmayank