Создание оболочки ZSH по умолчанию в MacOSX [закрыто]

99

Я установил zsh на свой Mac. и теперь я хочу сделать его оболочкой по умолчанию вместо Bash. Но, похоже, я столкнулся со следующей ошибкой:

$ echo $SHELL
/bin/bash
$ chsh -s /usr/bin/zsh
Changing shell for harshamv.
Password for harshamv:
chsh: /usr/bin/zsh: non-standard shell
Харша М.В.
источник
1
Что chsh -lвыводит? (Если это не сработает, каково содержимое /etc/shells?) Вы уверены, что это не так, а не просто предупреждение? Добавляет ли /usr/bin/zshтуда эту работу?
Etan Reisner
1
chsh: для параметра требуется аргумент - l использование: chpass [-l расположение] [-u authname] [-s shell] [пользователь]
Harsha MV
/ bin / bash / bin / csh / bin / ksh / bin / sh / bin / tcsh / bin / zsh
Harsha MV,
Что не так /bin/zsh?
jxh
1
Есть официальный способ изменить оболочку по умолчанию на zsh. См Apple , документ «Использовать ЗШ в качестве оболочки по умолчанию на вашем Mac» support.apple.com/en-ca/HT208050
Anthonyeef

Ответы:

86

3 простых шага:

  1. which zshэто дает вам путь к zsh
  2. Затем chsh -s /bin/zshили замените путь к вашему zsh, если он отличается
  3. Перезагрузите вашу машину
Квентин Перес
источник
ура, что сработало. это специфично для Йосемити?
Harsha MV
2
Нет, я не думаю, это было просто для вашей информации :)
Квентин Перес,
8
Еще один уместный комментарий к тому же старому вопросу, в котором говорится, что добавить, /usr/bin/zshчтобы /etc/shellsрешить проблему.
Brice
Работает отлично
Олкунмустафа
1
Установите его соответственно в / etc / shells! Найдите путь zsh с помощью '$ nano / etc / shells'. Мой был в / bin / zsh вместо / usr / bin / zsh 10.12.2
oikonomopo
189

Правильный ответ должен был решить вашу проблему:

chsh: / usr / bin / zsh: нестандартная оболочка

Причина, по которой это так, заключается в том, что chshбудут приниматься только оболочки, определенные в файле / etc / shells, как вы можете видеть, прочитав руководство для chsh:

chsh примет полный путь к любому исполняемому файлу в системе. Однако он выдаст предупреждение, если оболочка не указана в файле / etc / shells.

Чтобы решить эту проблему и сделать zsh оболочкой по умолчанию, вам следует:

$ sudo echo "$(which zsh)" >> /etc/shells
$ chsh -s $(which zsh)

Очевидно, я предполагаю, что zshэто на вашем пути. Это решение также будет работать, если вы, например, решите установить последнюю версию zshс brew install zsh.

EDIT (спасибо ThisIsFlorianK за комментарий) :

В зависимости от настроек вашей оболочки вы можете получить сообщение /etc/shells: Permission denied. Вы можете найти информацию об этой проблеме здесь. Чтобы обойти это, используйте вместо этого следующее:

$ sudo sh -c "echo $(which zsh) >> /etc/shells"
$ chsh -s $(which zsh)
Dangom
источник
4
На мой взгляд, это более точный ответ, чем принятый ответ. предполагая, что zsh установлен в / usr / bin / zsh, другие ответы не работают. Они работали для OP, потому что по умолчанию Apple устанавливает zsh в / bin / zsh. Однако, если вы хотите использовать zsh homebrew (который установлен в / usr / local / bin / zsh), это будет правильный способ сделать это
verboze
У меня есть «bash: / etc / shells: Permission denied». У меня сработал ответ через системные настройки.
Рикардо Стювен 02
44
Если вы получили /etc/shells: Permission denied==> Сделайте это вместо этого: sudo sh -c "echo $(which zsh) >> /etc/shells"
ThisIsFlorianK
1
stackoverflow.com/a/44547726/99834 - работал без проблем с системными файлами. Единственное, чего не хватает, - это версии интерфейса командной строки для выполнения той же операции.
sorin 02
@sorin Это беспричинный вандализм с отрицательным голосом или что-то действительно не так с ответом? Системные файлы не зря являются редактируемыми текстовыми файлами. chshпо умолчанию доступен по определенной причине. Хотя по сути нет ничего плохого в том, чтобы нажимать на множество меню для выполнения того же самого, это не только непереносимо и подвержено ошибкам, но также вводит в заблуждение, поскольку скрывает от пользователей, откуда поступают изменения.
dangom 02
52

Я смог заставить это работать, выполнив следующие действия:

  1. Зайдите в Системные настройки
  2. Щелкните "Пользователи и группы"
  3. Щелкните замок, чтобы внести изменения.
  4. Щелкните правой кнопкой мыши текущего пользователя -> Дополнительные параметры
  5. Измените оболочку входа в систему на / bin / zsh в раскрывающемся списке.
  6. Откройте новый терминал и проверьте с помощью echo $SHELL
Нейт Дженсон
источник
4
если вы установите zsh через homebrew, он поместит zsh в /usr/local/bin/zsh. Поэтому вам нужно будет отредактировать /etc/shellsв sudo и добавить запись, /usr/local/bin/zshпрежде чем вы сможете выбрать исполняемый файл zsh, установленный hombrew
Baldy
7

На своем рабочем MacBook мне пришлось сделать так:

sudo chsh -s /usr/local/bin/zsh my_user_name

Затем мне пришлось создать .bash_profileфайл, чтобы мой терминал переключался на z-shell каждый раз, когда я его открывал:

touch ~/.bash_profile
echo 'export SHELL=$(which zsh)' >> ~/.bash_profile
echo 'exec $(which zsh) -l' >> ~/.bash_profile

Отсюда позаимствована последняя идея .

саковии
источник