У меня возникли трудности с изменением значения $SHELL
в приложении OSX iTerm. iTerm запускается в /bin/zsh
, но значение $SHELL
не меняется.
/bin/zsh
в окне конфигурации iTerm.chsh
для изменения оболочки на /bin/zsh
./bin/zsh
echo $SHELL
/bin/zsh
$ echo $SHELL
/bin/bash
$ echo $USER
$ melvkim
$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made
Проблема заключалась в конфликте настроек приложения «iTerm» с оболочкой. Чтобы решить эту проблему, я сбросил команду «login shell» в окне настроек iTerm:
iTerm.app -> Настройки -> Профили -> Общие -> Команда -> Нажмите «Оболочка входа»
Затем я выполнил chsh
, чтобы изменить его как /bin/zsh
.
Чтобы воспроизвести проблему (с $SHELL, установленным как /bin/bash/
, даже если оболочка входа в систему /bin/zsh
), мне просто нужно было изменить настройку «iTerm» обратно на «Command: /bin/zsh/».
CMD + ,
чтобы перейти к настройкам/
в конце iTerm
пути к оболочке настроек, поскольку это может вызвать ошибки в сценариях оболочки.У меня была похожая проблема, но я решил ее , выполнив команду chsh -s /bin/zsh
в терминале, а затем перейдя к
Терминал -> Настройки -> Общее окно
и изменил параметр «Оболочки, открытые с помощью:» на «Оболочка входа по умолчанию » , а для команды (полный путь) задано значение /bin/zsh . Это должно решить вашу проблему.
Посмотрите здесь отличное объяснение и решение, опубликованное @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, или пока вы не закроете и не откроете окно оболочки.
Флаг только -s
для chsh
попыток изменить оболочку и, вероятно, не удается из-за Open Directory: обычная система UNIX «chsh» изменит запись /etc/passwd
. Тем не менее, я смог работать chsh
без аргументов, что дал мне редактор и следующую информацию:
# Changing user information for nevin.
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Shell: /bin/tcsh
Full Name: Nevin Williams
Office Location:
Office Phone:
Home Phone:
Мне удалось отредактировать запись «Shell:» на /bin/zsh
, и последующие окна терминала открывались с приглашением Z-shell.
chsh
без аргументов. Все еще не повезло. Переменная не меняется. На самом деле, когда редактор был загружен, он показал /bin/zsh
.$SHELL
iTerm. Пожалуйста, обратитесь к моему ответу за подробностями .. Спасибо!Попробуйте выполнить команду: chsh -s /bin/zsh
из терминала Mac по умолчанию.
У меня была аналогичная проблема. Терминал откроется в bash. csh -s /bin/zsh завершится ошибкой. Проверка оболочки по умолчанию в «Системных настройках» -> «Пользователи», щелкнув мой пользователь с нажатой клавишей Control, показала, что /bin/zsh был установлен. dscl показал, что /bin/zsh установлен. Я попытался сбросить Terminal-> Preferences на /bin/zsh. Это тоже не удалось.
В конечном итоге оказалось, что это файл блокировки. Перейдя в ~/Library/Preferences, я удалил файлы com.apple.Terminal.plist.lockfile и com.apple.Terminal.plist. Это решило проблему. При следующем запуске zsh правильно загрузился в терминал.
Боб Далглиш
/etc/shells
? В руководстве говорится, что если указанная вами оболочка отсутствует в этом файле, она не считается стандартной оболочкой.Дэн
iTerm
. Переменная создается в оболочке входа в систему из оболочки по умолчанию, используемойiTerm
.анонимный