Как заставить zsh работать как оболочку входа в Mac OS X (в iTerm)?

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

Итак, когда я устанавливаю оболочку входа в систему на bash, bash распознает этот первый «-» в $ 0 и запускается как оболочка входа в систему, а zsh - нет, хотя кажется, что должен.

Есть ли способ заставить zsh распознавать «-» в аргументе [0] или заставить iTerm запускать оболочку с аргументом командной строки --login?


person Ivan Tarasov    schedule 14.08.2009    source источник
comment
Я знаю, что с тех пор, как об этом спрашивали, прошло некоторое время, но, пожалуйста, подумайте о том, чтобы принять ответ @Harold Putman. Это единственный адрес, по которому задан вопрос.   -  person Craig S. Cottingham    schedule 25.12.2019


Ответы (6)


В iTerm -> Настройки -> Вкладка «Профили» -> В разделе «Общие» установите команду: / bin / zsh --login

/ bin / zsh --login

person Harold Putman    schedule 23.02.2013
comment
iterm2, похоже, не имеет этой опции на вкладке «Общие». Есть идеи, как достичь в iterm2 без изменения оболочки входа? - person Lloyd Dewolf; 14.04.2014
comment
Это общая вкладка на вкладке Профили. - person Harold Putman; 15.04.2014
comment
Ага! Это сбивает с толку, что есть и вкладка «Общие», и профили ›Общие. - person Lloyd Dewolf; 20.04.2014
comment
или в моем случае /usr/local/bin/zsh --login - person Yar; 01.07.2016
comment
Я использую это, чтобы изменить свою оболочку, а не редактировать / etc / shells, поскольку это должно предотвратить проблему, из-за которой моя оболочка становится непригодной для использования после обновления. - person sal; 12.04.2017

chsh -s $(which zsh)

Вам будет предложено ввести пароль, но как только вы обновите настройки, все новые сеансы iTerm / Terminal, которые вы запускаете на этом компьютере, будут по умолчанию на zsh.

person Damien Wilson    schedule 30.11.2009
comment
Пожалуйста, сначала прочтите вопрос. Проблема не в установке оболочки по умолчанию, проблема в том, что zsh не определяет, что он запущен как оболочка входа в систему. - person Ivan Tarasov; 01.12.2009
comment
Ах, мои извинения. Вы пробовали использовать флаг -i, чтобы заставить zsh запускаться в интерактивном режиме? - person Damien Wilson; 01.12.2009
comment
Его ответ заставляет zsh работать как оболочку входа в Mac OS X в iTerm. Просто это не делается так, как вы описываете, пытаясь сделать. Но это решает проблему, которую вы ставите под вопрос (в заголовке, а не в теле). Вопрос, которым вы заканчиваете в теле, - это совершенно другой вопрос. Если это ваш реальный вопрос (а не как заставить zsh работать как оболочку входа в систему), возможно, вам стоит перефразировать вопрос в заголовке. - person iconoclast; 10.02.2011
comment
Возможно, у вас недостаточно прав для выполнения этой команды. На самом деле это не требуется, поскольку вы можете настроить iTerm для запуска zsh вместо bash (как предложил Гарольд). - person Miroslav Nedyalkov; 22.01.2014
comment
Если chsh сообщает вам что-то вроде нестандартной оболочки, это означает, что вы должны добавить путь к новой оболочке в /etc/shells. Это может произойти, если вы, например, переходите на версию zsh, установленную homebrew, которая помещает ее в /usr/local/bin/zsh. - person shovavnik; 30.10.2014
comment
chsh -s $(which zsh) можно использовать для обеспечения правильного пути. - person Daniel Doezema; 26.11.2014
comment
Я получил chsh: /usr/local/bin/zsh: non-standard shell - person zx1986; 19.05.2015
comment
Также работает на моей недавно установленной macOS, именно то, что я искал. Мой Я установил iTerm 2 v 3.0.10 через brew casking, какая разница? - person Autodidact; 09.10.2016
comment
@Millisami Не имеет значения. chsh является частью дистрибутива FreeBSD, на котором основана MacOS. Это устанавливает вашу оболочку по умолчанию на системном уровне, поэтому она будет охватывать iTerm, терминал по умолчанию или любой другой терминал, который у вас есть, который учитывает переменную среды $SHELL. - person Damien Wilson; 11.10.2016
comment
Это 100% не ответ. Да, chsh изменит оболочку, которую вы создаете по умолчанию, но это не ответ на вопрос, как создать экземпляр оболочки для входа в систему, то есть использовать все переменные с нуля. - person Tabitha; 16.05.2019
comment
@iconoclast Это значимая проблема относительности: оболочка входа в систему также имеет очень конкретное техническое значение, которое в случае zsh означает, что оболочка получена .zprofile и .zlogin, а не только .zenv и .zshrc, как есть задокументировано, что делать при запуске в режиме входа в систему, и добавлено l в список символов в $-, чтобы указать на это). - person mtraceur; 05.07.2019

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

person Ark    schedule 03.07.2014
comment
Это спасло мне день. Я использую osx mavericks. - person qed; 18.07.2014
comment
Это работает для zsh по умолчанию, а не для установленного brew. - person Imam Bux; 15.12.2018

Команда для изменения оболочки при запуске - 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
person hasanain    schedule 03.03.2016
comment
Я не думаю, что было справедливо отвергать этот ответ. Реквизит, так как это единственный упоминание /etc/shells в самом ответе. - person heymatthew; 30.08.2016
comment
@heymatthew, потому что он не ответил на заданный вопрос. Он ответил на совершенно другой, не связанный с этим вопрос. - person Tabitha; 16.05.2019

Пробовали ли вы редактировать запись оболочки в настройках учетной записи.

Перейдите к настройкам учетных записей, разблокируйте и щелкните правой кнопкой мыши свою учетную запись пользователя, чтобы открыть диалоговое окно Дополнительные параметры. Ваша оболочка должна быть / bin / zsh, и вы можете соответствующим образом отредактировать этот вызов (т.е. добавить аргумент --login).

person Brian Agnew    schedule 14.08.2009
comment
К сожалению, это не работает: я могу установить любую оболочку, которая мне нравится, с помощью chsh (если эта оболочка указана в / etc / shells), однако нельзя добавить аргументы командной строки в оболочку диалогового окна расширенных настроек (iTerm не работает чтобы запустить оболочку). - person Ivan Tarasov; 14.08.2009
comment
Некоторые синтаксисы были изменены в OS X, но суть состоит в том, чтобы установить оболочку по умолчанию как / bin / zsh, как указывает Брайан выше. - person engineerDave; 18.06.2012
comment
Я так люблю. Я использовал этот ответ только сейчас, и только тогда понял, что написал его почти 4 года назад! - person Brian Agnew; 24.06.2013

Используйте служебную программу login для создания оболочки входа. Предположим, что пользователь, которому вы хотите войти, имеет имя пользователя Alice и что zsh установлен в /opt/local/bin/zsh (например, более поздняя версия, установленная через MacPorts). В iTerm 2 перейдите в «Настройки», «Профили», выберите профиль, который вы хотите настроить, и введите Command:

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

См. man login для получения более подробной информации о параметрах.

person Robin Klose    schedule 19.03.2014
comment
Это 100% не ответ. Да изменит оболочку, которую вы создаете по умолчанию, но это не ответ на вопрос, как создать экземпляр оболочки для входа в систему, то есть использовать все переменные с нуля. - person Tabitha; 16.05.2019