- Вопрос или проблема
- Ответ или решение
- Как настроить Zsh в качестве оболочки по умолчанию в Cygwin
- 1. Изменение оболочки с использованием chsh
- 2. Изменение файла cygwin.bat
- 3. Использование команды mkpasswd для создания файла /etc/passwd
- 4. Настройка переменной окружения SHELL
- 5. Использование nsswitch.conf
- 6. Настройка терминала в IDE, например IntelliJ
- Заключение
Вопрос или проблема
Как я могу настроить zsh в качестве оболочки по умолчанию в Cygwin?
При использовании Cygwin как многопользовательской среды используйте chsh
, как вы бы сделали в стандартной среде.
В противном случае измените cygwin.bat
так, чтобы он запускал zsh -l -i
вместо bash --login -i
, и это будет работать как входная оболочка.
Конечно, если вы хотите запускать несколько оболочек при старте, создайте набор .bat
файлов для загрузки конкретных оболочек (sh
, ksh
, csh
, fish
и т. д.)
Если я правильно понимаю ваш вопрос, вы ищете что-то другое, чем то, что предлагает chere (что, безусловно, довольно здорово само по себе).
Текущая версия Cygwin не имеет файла /etc/passwd, а система, с которой я работаю, имеет учетные данные Windows в доменной базе данных, которую я не контролирую. Следовательно, chsh больше не поддерживается.
Я также обнаружил, что bash не закодирован в скрипте startxwin и не закодирован ни в одном .bat файле. Оказывается, вам вовсе не нужно иметь дело с .bat файлами.
Ищя, как изменить свою оболочку, я нашел некоторые советы по mkpasswd
Я добавил это в смесь.
В man-странице говорилось:
СИНOPSIS mkpasswd [OPTIONS]... OPTIONS Не используйте эту команду для генерации локального файла /etc/passwd, если вы не действительно нуждаетесь в нем. Смотрите руководство пользователя Cygwin для более подробной информации. -c,--current Печатает текущего пользователя. ОПИСАНИЕ Программа mkpasswd может использоваться для создания файла /etc/passwd Файлу Cygwin не нужен, потому что он считывает информацию о пользователях из баз данных учетных записей Windows, но вы можете добавить файл /etc/passwd, например, если ваш компьютер часто отключен от контроллера домена. Обратите внимание, что эта информация статична, в отличие от информации, автоматически собранной Cygwin из баз данных учетных записей Windows. Если вы измените информацию о пользователе на вашей системе, вам нужно будет заново сгенерировать файл passwd, чтобы в нем была новая информация. Для очень простых нужд запись для текущего пользователя может быть создана с помощью параметра -c.
(Я не знаю, почему пробелы так “не так”…)
Затем я использовал следующую команду:
mkpasswd -c | sed -e ‘sX/bashX/zshX’ | tee -a /etc/passwd
В следующий раз, когда вы откроете терминал Cygwin, он перейдет прямо в zsh
И это, я думаю, то, о чем вы спрашивали.
Я просто добавил каталог bin
в каталог cygwin в мои переменные окружения Path в Windows и затем либо создал ярлык для:
mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login
либо просто изменил ярлык меню “Пуск” Cygwin по умолчанию на тот же.
Скопировано из мого ответа на Stack Overflow:
Вместо создания файла passwd, что Cygwin рекомендует не делать1, вы могли бы отредактировать /etc/nsswitch.conf. Добавьте или отредактируйте следующую строку:
db_shell: /usr/bin/zsh
Плюс и минус этого метода в том, что, если у вас несколько пользователей, это изменение затрагивает всех. Плюс в том, что это очень просто. Единственное, что вас задержит, это необходимость перезапустить Cygwin.
Если вы действительно используете mkpasswd после этого изменения, он будет использовать вашу новую оболочку по умолчанию для всех пользователей, которые могут войти в систему.
1 Документация mkpasswd говорит следующее:
Не используйте эту команду для генерации локального файла /etc/passwd, если вам действительно не нужно. Смотрите руководство пользователя Cygwin для более подробной информации.
Я не могу действительно найти какое-либо веское обоснование в руководстве пользователя, кроме упоминания, что вам придется заново сгенерировать файлы /etc/passwd и /etc/group, если ваши пользователи и группы изменятся, что, я думаю, является вполне достаточной причиной. Я могу сказать, что процесс довольно подвержен ошибкам для новичков.
Если вас интересует изменение оболочки, используемой в mintty/Cygwin Terminal, сначала проверяется переменная окружения SHELL, затем (уже не существующий) файл passwd, затем по умолчанию используется /bin/sh.
Я смог установить переменную окружения SHELL в Windows на /usr/bin/zsh
, и это сработало без каких-либо других изменений. Я просто изменил это для своего пользователя в Windows, а не глобально.
Установка переменной окружения, вероятно, различается в разных версиях Windows. Попробуйте поискать “переменные окружения” в панели управления Windows. Для меня, в Windows 7, это было Панель управления → Система → Дополнительные параметры системы, что вызывает панель управления/диалог Свойства системы, затем вкладка Дополнительно, затем кнопка Переменные окружения, что вызывает диалог Переменные окружения, затем создайте новую переменную пользователя с именем SHELL
со значением /usr/bin/zsh
. Затем нажмите OK, чтобы выйти из всего этого и начать новый mintty.
Просто подумал, что добавлю этот ответ, если он поможет кому-нибудь, кто его ищет. Если вы используете chere (которая добавляет опцию “Bash prompt here” в контекстное меню правой кнопки на любой папке), вы можете установить его на zsh (“Zsh Prompt Here”) с помощью:
chere -i -t mintty -s zsh
Если вы хотите использовать оболочку Cygwin внутри IDE Intellij, то используйте следующую настройку в настройках/инструментах/терминал
c:\cygwin\bin\zsh.exe -l -i
Это встроит оболочку cygwin внутри intellij, вместо того чтобы открывать новое окно
Ответ или решение
Как настроить Zsh в качестве оболочки по умолчанию в Cygwin
Cygwin предоставляет возможность использовать оболочку Zsh, вызывая ее вместо стандартной Bash. В этой статье мы рассмотрим несколько подходов к настройке Zsh в качестве оболочки по умолчанию в Cygwin.
1. Изменение оболочки с использованием chsh
Для много-пользовательских систем вы можете использовать команду chsh
, как и в стандартных Unix-системах. Однако следует отметить, что текущая версия Cygwin не поддерживает систему /etc/passwd
, и, следовательно, использование chsh
может быть ограниченным. Если вы хотите использовать chsh
, убедитесь, что ваша система поддерживает это, и выполните команду:
chsh -s /usr/bin/zsh
2. Изменение файла cygwin.bat
Если вы используете Cygwin на личном компьютере и не нуждаетесь в много-пользовательских настройках, вы можете легко изменить файл cygwin.bat
, чтобы он запускал Zsh:
- Откройте
cygwin.bat
в текстовом редакторе. - Замените строку, которая вызывает Bash, на следующую:
@bash --login -i
на
@zsh -l -i
Теперь при каждом запуске Cygwin будет использоваться Zsh.
3. Использование команды mkpasswd
для создания файла /etc/passwd
Хотя Cygwin не требует наличия файла /etc/passwd
, вы можете создать его для удобства. Используйте следующую команду:
mkpasswd -c | sed -e 'sX/bashX/zshX' | tee -a /etc/passwd
Эта команда создаст запись для текущего пользователя и заменит оболочку на Zsh. После выполнения этой команды при следующем запуске Cygwin, он будет использовать Zsh по умолчанию.
4. Настройка переменной окружения SHELL
Вы также можете установить переменную окружения SHELL
в Windows:
- Откройте Панель управления и перейдите в "Система".
- Выберите "Дополнительные параметры системы".
- Во вкладке "Дополнительно" нажмите "Переменные среды".
- Создайте новую переменную пользователя с именем
SHELL
и значением/usr/bin/zsh
.
После этого перезапустите Cygwin, чтобы изменения вступили в силу.
5. Использование nsswitch.conf
Упрощенный метод заключается в редактировании файла /etc/nsswitch.conf
. Добавьте или измените строчку:
db_shell: /usr/bin/zsh
Это изменение повлияет на всех пользователей системы. Обратите внимание, что для применения изменений потребуется перезапуск Cygwin.
6. Настройка терминала в IDE, например IntelliJ
Если вы планируете использовать Cygwin внутри интегрированной среды разработки, такой как IntelliJ, настройте терминал следующим образом:
- Перейдите в настройки терминала в IntelliJ.
- Укажите путь к
zsh.exe
:
c:\cygwin\bin\zsh.exe -l -i
Это позволит вам запускать Zsh, не открывая отдельное окно.
Заключение
Настройка Zsh в Cygwin — это простой процесс, который можно выполнить различными способами. Выберите подходящий для вас метод в зависимости от ваших потребностей и конфигурации системы. Не забывайте обновлять свои настройки окружения, чтобы гарантировать корректную работу оболочки.