У меня возникают некоторые трудности с изменением значения $SHELL
в приложении iTerm для OSX. iTerm запускается /bin/zsh
, но значение $SHELL
не меняется.
Что я сделал:
- Изменена «команда», как
/bin/zsh
в окне конфигурации iTerm. - Выполняется
chsh
для изменения оболочки на/bin/zsh
. - Подтверждено, что iTerm запущен в
/bin/zsh
ПРИМЕЧАНИЕ # 1: В стандартном терминальном приложении OSX «Terminal.app»:
echo $SHELL
/bin/zsh
ПРИМЕЧАНИЕ №2. В популярном терминальном приложении OSX «iTerm.app»:
$ echo $SHELL
/bin/bash
$ echo $USER
$ melvkim
$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made
/etc/shells
? В руководстве говорится, что если указанная оболочка отсутствует в этом файле, она не считается стандартной оболочкой.Ответы:
Проблема заключалась в конфликте настроек приложения iTerm с оболочкой. Чтобы решить эту проблему, я сбросил команду «login shell» в окне настроек iTerm:
Затем я выполнил,
chsh
чтобы изменить его как/bin/zsh
.Чтобы воспроизвести проблему (имея $ SHELL, установленную как
/bin/bash/
, даже если используется оболочка входа в систему/bin/zsh
), мне просто нужно было изменить настройку «iTerm» обратно на «Command: / bin / zsh /».источник
-s
Флагchsh
только попытки изменить оболочку, и , вероятно , не удается из - Open Directory: «» CHSH обычной системы UNIX бы изменить/etc/passwd
запись. Тем не менее, я смог запуститьchsh
без аргументов, которые дали мне редактор, и следующую информацию:Мне удалось отредактировать запись «Shell:» в
/bin/zsh
, и последующие окна терминала открылись с приглашением Z-оболочки.источник
chsh
без аргументов. Все еще не повезло. Переменная не меняется. На самом деле, когда загрузился редактор, он показывал/bin/zsh
.$SHELL
iTerm. Пожалуйста, обратитесь к моему ответу для деталей .. Спасибо!Ищите здесь отличное объяснение и решение, опубликованное @ 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, или пока вы не закроете и не откроете окно оболочки.источник
Попробуйте выполнить команду:
chsh -s /bin/zsh
из терминала Mac по умолчанию.источник