Как изменить оболочку по умолчанию в iTerm?

У меня возникли трудности с изменением значения $SHELLв приложении OSX iTerm. iTerm запускается в /bin/zsh, но значение $SHELLне меняется.

Что я наделал:

  1. Изменена «команда», как /bin/zshв окне конфигурации iTerm.
  2. Выполняется chshдля изменения оболочки на /bin/zsh.
  3. Подтвержденный 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? В руководстве говорится, что если указанная вами оболочка отсутствует в этом файле, она не считается стандартной оболочкой.
Ваша настоящая проблема заключается не в том, чтобы изменить $SHELL, а в вашей реальной оболочке по умолчанию в iTerm. Переменная создается в оболочке входа в систему из оболочки по умолчанию, используемой iTerm.
не могли бы вы пометить свой ответ как правильный, чтобы отметить вопрос как отвеченный? Вы можете пометить свой ответ как решение. Спасибо!

Ответы (6)

Проблема заключалась в конфликте настроек приложения «iTerm» с оболочкой. Чтобы решить эту проблему, я сбросил команду «login shell» в окне настроек iTerm:

iTerm.app -> Настройки -> Профили -> Общие -> Команда -> Нажмите «Оболочка входа»

Затем я выполнил chsh, чтобы изменить его как /bin/zsh.

Чтобы воспроизвести проблему (с $SHELL, установленным как /bin/bash/, даже если оболочка входа в систему /bin/zsh), мне просто нужно было изменить настройку «iTerm» обратно на «Command: /bin/zsh/».

У моего приятеля была такая же проблема с IntelliJ.
re: «iTerm.app -> Настройки». Я давний пользователь Linux (поэтому я здесь), но новичок в iOs. Я просто не могу найти эту инструкцию. Дополнительные рекомендации будут оценены. Я очень хочу bash в IOs!
@StephenHosking с активным iTerm, сделайте, 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.
Попробуйте изменить оболочку с помощью редактора. Я сделал снимок экрана, на котором я переходил с /bin/tcsh на /bin/zsh и обратно. bonmot.ca/~nevin/chsh.mov
Большое спасибо за то, что уделили время записи и публикации скринкаста! Ваше решение должно работать на других эмуляторах терминала, но я не смог изменить $SHELLiTerm. Пожалуйста, обратитесь к моему ответу за подробностями .. Спасибо!

Попробуйте выполнить команду: chsh -s /bin/zshиз терминала Mac по умолчанию.

Чем это отличается от ОП?
@ JMY1000 Если вы попытаетесь выполнить эту команду из iTerm, изменения не отразятся. Вы сможете заставить его работать, запустив его с терминала 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 правильно загрузился в терминал.