Подивіться тут на відмінне пояснення та рішення, опубліковані @ 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? У посібнику зазначено, що якщо вказана оболонка знаходиться у цьому файлі, вона не вважається стандартною оболонкою.