Як змусити zsh запускатися як оболонка для входу на Mac OS X (в iTerm)?


149

Коли zsh встановлюється як оболонка входу в Mac OS X, коли він запускається iTerm, zsh не вважає, що він запускається як оболонка входу, хоча він запускається як '-zsh' ('-') перший символ arg [0]), який повинен означати, що він повинен починатися як оболонка входу.

Отже, коли я встановив оболонку входу до bash, bash розпізнає це перше '-' у $ 0 і працює як оболонка для входу, але zsh не робить, хоча здається, що так і слід.

Чи є спосіб змусити zsh розпізнати '-' в arg [0], або змусити iTerm запустити оболонку аргументом командного рядка --login?


2
Я знаю, що минув час з цього питання, але, будь ласка, подумайте про прийняття відповіді @Harold Putman. Це єдиний, на який адресується поставлене питання.
Крейг С.

Відповіді:


106

В iTerm -> Налаштування -> Вкладка "Профілі" -> Загальний розділ встановити команду для: / bin / zsh --login

/ bin / zsh --login


1
Здається, у iterm2 ця опція не знаходиться на вкладці Загальні. Будь-яка ідея, як досягти в iterm2 без зміни оболонки входу?
Ллойд Девульф

6
Це загальна вкладка на вкладці "Профілі".
Гарольд Путман

Ага! Це заплутано, що є і вкладка General, і Profiles> General.
Ллойд Девульф

2
або в моєму випадку/usr/local/bin/zsh --login
Яр

Я використовую це для зміни своєї оболонки, а не для редагування / etc / shell, оскільки це повинно запобігти проблемі з тим, що моя оболонка стане непридатною після оновлення.
сал

220
chsh -s $(which zsh)

Вам буде запропоновано ввести пароль, але як тільки ви оновите налаштування, будь-які нові сеанси iTerm / Terminal, які ви запускаєте на цій машині, за замовчуванням будуть zsh.


2
Будь ласка, прочитайте запитання спочатку. Проблема не в налаштуванні оболонки за замовчуванням, проблема полягає в тому, що zsh не виявляє, що вона запускається як оболонка для входу.
Іван Тарасов

1
Ах, вибачте. Ви намагалися використовувати прапор -i, щоб змусити zsh запускатися в інтерактивному режимі?
Демієн Вілсон

11
Його відповідь змушує zsh виконуватись як оболонка для входу на Mac OS X в iTerm. Це просто не робиться так, як ви описуєте, намагаючись. Але це вирішує проблему, яку ви ставите під сумнів (в заголовку, а не в тілі). Питання, яке ви закінчуєте в тілі, - зовсім інше питання. Якщо це ваше справжнє запитання (а не як змусити zsh виконуватись як оболонка входу), можливо, вам слід переформулювати це питання в заголовку.
іконоборство

45
Якщо chshвам сказати щось на кшталт "нестандартна оболонка", це означає, що вам потрібно додати шлях до нового оболонки /etc/shells. Це може статися, якщо ви змінюєте, наприклад, версію zsh, встановлену homebrew, яка додає його /usr/local/bin/zsh.
шовавник

1
chsh -s $(which zsh)можна використовувати для забезпечення правильного шляху.
Даніель Доезема

56

Перейдіть на панель « Користувачі та групи » у налаштуваннях системи -> Виберіть користувача -> Клацніть блокування, щоб внести зміни (лівий нижній кут) -> клацніть правою кнопкою миші поточного користувача, виберіть Додаткові параметри ... -> Виберіть оболонку входу: / bin / zsh і ОК


3
Це врятувало мені день. Я на OSX Mavericks.
qed

Це працює для zsh за замовчуванням, а не для встановленого пивом.
Імам Бакс

19

Команда зміни оболонки при запуску є chsh -s <path_to_shell>. Оболонки за замовчуванням у mac OS X встановлюються всередині binкаталогу, тому якщо ви хочете змінити стандартний, zshви користуєтесь наступним

chsh -s /bin/zsh

Якщо ви використовуєте іншу версію, zshможливо, вам доведеться додати цю версію, /etc/shellsщоб уникнути нестандартного повідомлення оболонки. Наприклад, якщо ви хочете версію домашньої пивоваріння, zshтоді вам потрібно додати /usr/local/bin/zshдо згаданого файлу, який ви можете виконати в одній команді, sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"а потім запустити

chsh -s /usr/local/bin/zsh

Або якщо ви хочете зробити все в одній команді, просто скопіюйте та вставте це, якщо zsh вже встановлено

sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells" && chsh -s /usr/local/bin/zsh

2
Я не думаю, що було б справедливо спростовувати цю відповідь. Реквізит - це єдиний, який згадує /etc/shellsв тілі саму відповідь.
heymatthew

1
@heymatthew Причина, якою його зволікають, полягає в тому, що він не відповів на задане питання. Він відповів на зовсім інше незв'язане питання.
Табіта

17

Ви спробували редагувати запис оболонки в налаштуваннях облікового запису .

Перейдіть у розділ Налаштування облікових записів, розблокуйте та натисніть правою кнопкою миші свій обліковий запис користувача для діалогового вікна « Розширені налаштування» . Оболонка повинна бути / bin / zsh, і ви можете відповідним чином відредагувати це виклик (тобто додати аргумент --login).


На жаль, це не працює: я можу встановити будь-яку оболонку, яка мені подобається, використовуючи chsh (доки ця оболонка вказана в / etc / shell), однак не можна додавати аргументи командного рядка до оболонки Діалогове вікно налаштувань (iTerm не вдається для запуску оболонки).
Іван Тарасов

Деякі з синтаксису змінилися в OS X, але суть полягає в тому, щоб встановити оболонку за замовчуванням на / bin / zsh, як Брайан вказує вище
engineerDave

7
Я люблю ТАК. Я використовував цю відповідь саме зараз, і лише тоді зрозумів, що написав її майже 4 роки тому!
Брайан Агнеу

-2

Використовуйте loginутиліту для створення оболонки для входу. Припустимо, що у користувача, який ви хочете увійти, є ім’я користувача Alice і встановлено zsh /opt/local/bin/zsh(наприклад, більш нова версія, встановлена ​​через MacPorts). У iTerm 2 перейдіть до Налаштування, Профілі, виберіть профіль, який потрібно налаштувати, та введіть команду :

login -pfq Alice /opt/local/bin/zsh

Див man loginдля отримання більш докладної інформації про параметри.


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