Ищите здесь отличное объяснение и решение, опубликованное @ mklement0 [в связи с bashпроблемой обновления.
У меня была похожая проблема в том, что я делал противоположное в моей системе (OS X 10.10.1): bashснова oh-my-zshсделал оболочку входа в систему по умолчанию после моей установки , которая сделала zshнастройку по умолчанию, а затем bashобновил систему с 3.2.53 до 4.3.30 с помощью Homebrew ( почему Apple отправляет Yosemite со старой bashверсией?).
Я думаю, что SHELLпеременная окружения отражает, но не контролирует фактическую оболочку входа по умолчанию для пользователя. Например, если, скажем, bashбыло вашим значением по умолчанию, и вы открываете новое bashокно оболочки из терминала, то $ export SHELL="/bin/zsh"; echo "$SHELL"будет отображаться, /bin/zshно никаких реальных изменений не произойдет, потому что если вы откроете новое окно оболочки из терминала и сделаете, $ echo $0то вы увидите -bash( $0содержит имя и путь команды, которая запустила окно оболочки, в данном случае bash, и -рядом с ним указывает, что это оболочка входа в систему).
Как указал @ mklement0, фактическая оболочка входа в систему по умолчанию для пользователя контролируется UserShellсвойством в записи пользователя во внутренней базе данных системы - это можно запросить и обновить с помощью утилиты командной строки dscl. Эта информация будет передана в ваше терминальное приложение, когда вы откроете окно оболочки.
Что chsh -s /bin/zshзначит изменить это UserShellсвойство, чтобы установить его zsh- вы можете проверить это, выполнив dscl . -read /Users/$USER/ UserShellсразу же, и вы увидите UserShell: /bin/zsh. Но изменение не вступает в силу в текущем окне, пока вы не сделаете что-то вроде того, exec su - $USERчто предложено @ mklement0, или пока вы не закроете и не откроете окно оболочки.
/etc/shells? В руководстве говорится, что если указанная оболочка отсутствует в этом файле, она не считается стандартной оболочкой.