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


98

Я встановив 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туди робить цю роботу?
Етан Рейснер

1
chsh: параметр вимагає аргументу - l використання: chpass [-l location] [-u authname] [-s shell] [user]
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. Перезапустіть машину

ага, це спрацювало. це специфічно для Йосеміті?
Харша М. В.

2
Ні, я не думаю, це було лише для вашої інформації :)
Квентін Перес

8
Ще один важливий коментар на тому ж самому старшому питання , який говорить , щоб додати /usr/bin/zshдо /etc/shellsВирішує проблему.
Brice

Це працює ідеально
Олькунмустафа,

1
Встановіть його відповідно до / etc / shell! Шукайте zsh-шлях із "$ nano / etc / shell". Шахта була на / bin / zsh замість / usr / bin / zsh
10.12.2

187

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

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

Причиною цього є те, що chshприйматимуть лише оболонки, визначені у файлі / etc / shell, як ви можете переконатися, прочитавши посібник для 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)

4
це, на мій погляд, точніше прийнятої відповіді. якщо припустити, що zsh встановлено на / usr / bin / zsh, інші відповіді не працюють. Вони працювали для OP, оскільки за замовчуванням Apple встановлює zsh у / bin / zsh. Однак, якщо ви хочете скористатися zsh homebrew (який встановлений під / usr / local / bin / zsh), це був би правильний спосіб це зробити
детально

У мене "bash: / etc / shells: Дозвіл відмовлено". Відповідь через Системні налаштування у мене спрацював.
Рікардо Стувен,

44
Якщо ви отримаєте /etc/shells: Permission denied==> Зробіть це замість цього: sudo sh -c "echo $(which zsh) >> /etc/shells"
ThisIsFlorianK

1
stackoverflow.com/a/44547726/99834 - працював, не возившись із системними файлами. Не вистачає лише версії CLI для виконання тієї самої операції.
Сорін

@sorin Чи є це безоплатним вандалізмом проти чи не відповідає щось? Системні файли є причиною редагування текстових файлів. chshдоступний за замовчуванням з причини. Незважаючи на те, що немає нічого неправильного в натисканні навантажень меню, щоб виконати одне і те ж, це не лише непереносимо та схильне до помилок, але й вводить в оману, оскільки приховує від користувачів, звідки походить зміна.
dangom

52

Я зміг отримати цю роботу, виконавши наступне:

  1. Перейдіть до Системних налаштувань
  2. Клацніть на "Користувачі та групи"
  3. Клацніть на замок, щоб внести зміни.
  4. Клацніть правою кнопкою миші поточного користувача -> Додаткові параметри
  5. Змініть оболонку входу на / bin / zsh у спадному меню.
  6. Відкрийте новий термінал і підтвердьте за допомогою echo $SHELL

4
якщо ви встановите zsh через homebrew, він помістить zsh в /usr/local/bin/zsh. Тому вам потрібно редагувати /etc/shellsпід Суду і додайте запис для , /usr/local/bin/zshперш ніж ви можете вибрати ЗШ виконуваний файл , який hombrew встановлений
Болд

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

Остання ідея була запозичена звідси .

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