chsh не меняет $ SHELL

9

У меня возникают некоторые трудности с изменением значения $SHELLв приложении iTerm для OSX. 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
melvynkim
источник
1
Вы смотрели /etc/shells? В руководстве говорится, что если указанная оболочка отсутствует в этом файле, она не считается стандартной оболочкой.
Боб Далглиш

Ответы:

5

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

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

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

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

melvynkim
источник
1

-sФлаг chshтолько попытки изменить оболочку, и , вероятно , не удается из - Open Directory: «» CHSH обычной системы UNIX бы изменить /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-оболочки.

Невин Уильямс
источник
Я пытался chshбез аргументов. Все еще не повезло. Переменная не меняется. На самом деле, когда загрузился редактор, он показывал /bin/zsh.
Мельвинким
Попробуйте изменить оболочку с помощью редактора. Я сделал снимок экрана с изменением с / bin / tcsh на / bin / zsh и обратно. bonmot.ca/~nevin/chsh.mov
Невин Уильямс
Большое спасибо за то, что нашли время записать свой скринкаст! Предполагается, что ваше решение будет работать на других эмуляторах терминала, но я не смог изменить $SHELLiTerm. Пожалуйста, обратитесь к моему ответу для деталей .. Спасибо!
Мельвинким
1

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

Ramius
источник
0

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

mohitmayank
источник
1
Чем это отличается от ОП?
JMY1000
@ JMY1000 Если вы попытаетесь выполнить эту команду из iTerm, изменения не будут отражены. Вы должны быть в состоянии заставить это работать, выполняя это от терминала по умолчанию Mac.
Мохитмаянк