Как заставить 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 не имеет этой опции на вкладке General. Любая идея, как достичь в iterm2 без изменения логин оболочки?
Ллойд Дьюольф
6
Это общая вкладка на вкладке «Профили».
Гарольд Путман
Ага! Это сбивает с толку, что есть и вкладка General, и Profiles> General.
Ллойд Дьюольф
2
или в моем случае/usr/local/bin/zsh --login
Яр
Я использую это для изменения моей оболочки, а не для редактирования / etc / shells, так как это должно предотвратить проблему с невозможностью использования моей оболочки после обновления.
сала
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 и ок

Arunkumar
источник
3
Это спасло мой день. Я на OXX Маверикс.
ч.т.д.
Это работает для zsh по умолчанию, а не для установленного brew.
Имам Букс
19

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

chsh -s /bin/zsh

Если вы используете другую версию zsh вам, возможно, придется добавить эту версию, /etc/shellsчтобы избежать нестандартного сообщения оболочки. Например, если вам нужна версия home-brew, 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
hasanain
источник
2
Я не думаю, что было бы справедливо понизить этот ответ. Реквизит как единственный, который упоминает /etc/shellsв теле самого ответа.
Heymatthew
1
@heymatthew причина, по которой его отвергают, потому что он не ответил на заданный вопрос. Это ответило на совершенно другой не связанный вопрос.
Табита
17

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

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

Брайан Агнью
источник
К сожалению, это не работает: я могу установить любую оболочку, которая мне нравится, используя chsh (при условии, что эта оболочка указана в / etc / shells), однако нельзя добавить аргументы командной строки в оболочку в диалоговом окне расширенных настроек (iTerm завершается неудачно запустить оболочку).
Иван Тарасов
Некоторый синтаксис изменился в OS X, но суть состоит в том, чтобы установить для вашей оболочки по умолчанию значение / bin / zsh, как указывает Брайан выше
engineerDave
7
Я так люблю. Я использовал этот ответ только сейчас, и только тогда понял, что написал его почти 4 года назад!
Брайан Агнью
-2

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

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

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

Робин Клозе
источник
Это 100% не ответ. «Да» изменит оболочку, которую вы по умолчанию создали, но это не ответ на вопрос о том, как создать «оболочку» экземпляра оболочки, то есть ресурс всех переменных с нуля.
Табита