Guarda qui per l'eccellente spiegazione e soluzione pubblicata da @ mklement0 [in relazione a un problema di aggiornamento di bash
.
Ho avuto un problema simile nel fare il contrario sul mio sistema (OS X 10.10.1): rendendo bash
la shell di login predefinita dopo aver installato oh-my-zsh
, che ha reso zsh
l'impostazione predefinita e quindi l'aggiornamento di bash
da 3.2.53 a 4.3.30 utilizzando Homebrew (perché Apple spedisce Yosemite con una vecchia versione bash
?).
Penso che la variabile di ambiente SHELL
rifletta, ma non controlla la shell di login predefinita effettiva per l'utente. Ad esempio, se, per esempio, bash
era il tuo valore predefinito e aprivi una nuova finestra di shell bash
dal terminale, $ export SHELL="/bin/zsh"; echo "$SHELL"
mostrerebbe /bin/zsh
ma non si verificheranno cambiamenti effettivi perché se apri una nuova finestra shell dal terminale e fai $ echo $0
allora vedresti -bash
( $0
contiene il nome e il percorso del comando che ha avviato la finestra della shell, in questo caso bash
, e il -
accanto indica che è un shell di accesso).
Come @ mklement0 ha sottolineato che la shell di login predefinita reale per l'utente è controllata dalla proprietà UserShell
nel record dell'utente nel database interno del sistema - questa può essere interrogata e aggiornata utilizzando l'utilità della riga di comando dscl
. Questa informazione passerà alla tua app terminale quando apri una finestra della shell.
Ciò che chsh -s /bin/zsh
fa è modificare questa proprietà UserShell
per impostarla su zsh
- puoi controllare questo facendo dscl . -read /Users/$USER/ UserShell
subito dopo, e vedrai UserShell: /bin/zsh
. Ma la modifica è non effettuata nella finestra corrente, finché non fai qualcosa come exec su - $USER
come suggerito da @ mklement0, o finché non chiudi e apri una finestra della shell.