chsh не змінюється $ SHELL


9

У мене виникають труднощі зі зміною значення програми $SHELLiTerm в 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

1
Ви заглянули /etc/shells? У посібнику зазначено, що якщо вказана оболонка знаходиться у цьому файлі, вона не вважається стандартною оболонкою.
Боб Даглегіш

Відповіді:


5

Проблемою були конфліктні налаштування програми «iTerm» із оболонкою. Щоб вирішити, я скинув команду "оболонка входу" у вікні налаштувань iTerm:

iTerm.app -> Налаштування -> Профілі -> Загальне -> Команда -> Клацніть на "Оболонка входу"

Потім я виконав, chshщоб змінити його як /bin/zsh.

Щоб відтворити проблему (якщо $ SHELL встановлено як /bin/bash/, навіть незважаючи на те, що оболонка входу є /bin/zsh), мені просто довелося змінити налаштування "iTerm" назад на "Command: / bin / zsh /".


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-shell.


Я намагався 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, або поки не закриєте і не відкриєте вікно оболонки.


0

Спробуйте виконати команду: chsh -s /bin/zshз терміналу Mac за замовчуванням.


1
Чим це відрізняється від ОП?
JMY1000

@ JMY1000 Якщо ви спробуєте виконати цю команду з iTerm, зміни не відображаються. Ви повинні мати змогу змусити його працювати, виконавши його з терміналу за замовчуванням Mac.
mohitmayank
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.