34

Как я могу настроить zsh как оболочку по умолчанию в Cygwin?

7 ответов7

45

Если вы не используете cygwin в качестве многопользовательской среды (в этом случае используйте chsh как при стандартной среде).

В противном случае вы просто измените cygwin.bat, чтобы он выполнял zsh -l -i вместо bash --login -i и он будет работать как оболочка входа в систему.  

Конечно, если вы хотите запустить несколько оболочек при запуске, просто создайте набор файлов .bat для загрузки различных оболочек. (sh , ksh , csh , fish т. д.)

Обновить...

Я чувствовал, что должен обновить это, чтобы предоставить информацию о том, как делать это без chsh но все же делать это на стороне Unix. Отредактируйте файл /etc/passwd и замените вхождения /bin/bash на /bin/zsh . (Это фактически то, что сделает chsh , но таким образом вы сделаете это для всех пользователей за один раз.)

17

Я просто добавляю каталог bin каталоге cygwin в свою переменную среды Windows Path и затем создаю ярлык для:

mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login

или просто измените ярлык по умолчанию в меню запуска Cygwin на тот же.

17

Если я правильно прочитал ваш вопрос, вы ищете что-то еще, кроме того, что поставляет chere (что само собой разумеется , довольно круто).

В текущей версии Cygwin нет файла /etc/passwd , а в системе, над которой я работаю, данные учетной записи Windows находятся в базе данных домена вне моего контроля. Следовательно, chsh больше не поддерживается.

Я также обнаружил, что bash не жестко запрограммирован в сценарии startxwin и не запрограммирован жестко в любом файле .bat. Оказывается, вам совсем не нужно возиться с файлами .bat.

В поисках того, как изменить мою оболочку, я нашел несколько советов о mkpasswd

Я добавил это к соединению.

На странице руководства сказано:

SYNOPSIS
   mkpasswd [OPTIONS]...

OPTIONS
   Don't use this command to generate a local /etc/passwd file, unless you
   really need one.  See the Cygwin User's Guide for more information.

   -c,--current
          Print current user.

  DESCRIPTION
        The   mkpasswd  program can be used to create a        /etc/passwd
   file.  Cygwin doesn't need  this  file,        because  it  reads  user
   information  from  the Windows account databases,       but you can add
   an  /etc/passwd file, for instance       if your machine is often  dis‐
   connected from its domain controller.

        Note  that this information is static, in contrast to the informa‐
   tion       automatically gathered by Cygwin from  the  Windows  account
   databases.  If        you  change  the user information on your system,
   you'll need to regenerate       the passwd file for it to have the  new
   information.


        For  very  simple needs, an entry for the current user can be cre‐
   ated       by using the option  -c.

(Я не знаю, почему интервал так "выключен" ...)

Затем я использовал следующую команду:

mkpasswd -c | sed -e 'sX/bashX/zshX' | tee -a /etc /passwd

В следующий раз, когда вы откроете терминал Cygwin, он перейдет прямо в zsh

И это, я думаю, то, что вы просили.

5

Скопировано из моего ответа на переполнение стека:


Вместо создания файла passwd, который Cygwin рекомендует для 1, вы можете отредактировать /etc/nsswitch.conf. Добавьте или измените следующую строку:

db_shell: /usr/bin/zsh

Недостатком этого метода является то, что если у вас есть несколько пользователей, это изменение влияет на всех из них. С другой стороны, все очень просто. Единственный улов в том, что вам нужно перезапустить Cygwin.

Если вы используете mkpasswd после этого изменения, он будет использовать новую оболочку по умолчанию для всех пользователей, которые могут войти в систему .


1 Документация mkpasswd гласит:

Не используйте эту команду для создания локального файла /etc /passwd, если он вам действительно не нужен. См. Руководство пользователя Cygwin для получения дополнительной информации.

Я не могу найти никаких веских аргументов в руководстве пользователя, кроме упоминания о том, что вам придется заново создавать файлы /etc /passwd и /etc /group, если ваши пользователи и группы меняются, что, я полагаю, достаточно прилично причина. Я могу сказать, что этот процесс несколько ошибочен для новичков.

4

Предполагая, что вы заинтересованы в изменении оболочки, используемой в терминале mintty/Cygwin, он сначала проверяет переменную среды SHELL, затем (теперь уже не существует) файл passwd, а затем возвращается к /bin /sh, что, похоже, и делает. по умолчанию.

Мне удалось установить переменную среды SHELL в Windows на /usr/bin/zsh и она работала без каких-либо других изменений. Я просто изменил его для моего пользователя Windows, а не глобально.

Установка переменной среды, вероятно, различается для разных версий Windows. Попробуйте найти "среду" в панели управления Windows. Для меня в Windows 7 это была Панель управления → Система → Дополнительные параметры системы, которая вызывает панель управления / диалоговое окно "Свойства системы", затем вкладку "Дополнительно", затем кнопку "Переменные среды", которая вызывает диалоговое окно "Переменные среды" и затем создает новая пользовательская переменная с именем SHELL со значением /usr/bin/zsh . Тогда хорошо, вернитесь из всего этого и начните новую мяту.

1

Просто подумал, что добавлю этот ответ на случай, если он поможет любому, кто его ищет. Если вы используете chere (который добавляет опцию "Bash prompt here" в контекстное меню правой папки любой папки), вы можете установить для него значение zsh ("Zsh Prompt Here") с помощью:

chere -i -t mintty -s zsh
0

Если вы хотите использовать оболочку Cygwin внутри IDE Intellij, используйте следующую настройку в настройках / инструментах / терминале

c:\cygwin\bin\zsh.exe -l -i

Это встроит оболочку cygwin в intellij, а не в новое окно

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .