Ищите здесь отличное объяснение и решение, опубликованное @ 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
? В руководстве говорится, что если указанная оболочка отсутствует в этом файле, она не считается стандартной оболочкой.