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