Как я могу настроить zsh как оболочку по умолчанию в Cygwin?
7 ответов
Если вы не используете cygwin в качестве многопользовательской среды (в этом случае используйте chsh
как при стандартной среде).
В противном случае вы просто измените cygwin.bat, чтобы он выполнял zsh -l -i
вместо bash --login -i
и он будет работать как оболочка входа в систему.
Конечно, если вы хотите запустить несколько оболочек при запуске, просто создайте набор файлов .bat
для загрузки различных оболочек. (sh
, ksh
, csh
, fish
т. д.)
Обновить...
Я чувствовал, что должен обновить это, чтобы предоставить информацию о том, как делать это без chsh
но все же делать это на стороне Unix. Отредактируйте файл /etc/passwd
и замените вхождения /bin/bash
на /bin/zsh
. (Это фактически то, что сделает chsh
, но таким образом вы сделаете это для всех пользователей за один раз.)
Я просто добавляю каталог bin
каталоге cygwin в свою переменную среды Windows Path и затем создаю ярлык для:
mintty.exe -i /Cygwin-Terminal.ico /bin/zsh --login
или просто измените ярлык по умолчанию в меню запуска Cygwin на тот же.
Если я правильно прочитал ваш вопрос, вы ищете что-то еще, кроме того, что поставляет 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
И это, я думаю, то, что вы просили.
Скопировано из моего ответа на переполнение стека:
Вместо создания файла passwd, который Cygwin рекомендует для 1, вы можете отредактировать /etc/nsswitch.conf. Добавьте или измените следующую строку:
db_shell: /usr/bin/zsh
Недостатком этого метода является то, что если у вас есть несколько пользователей, это изменение влияет на всех из них. С другой стороны, все очень просто. Единственный улов в том, что вам нужно перезапустить Cygwin.
Если вы используете mkpasswd после этого изменения, он будет использовать новую оболочку по умолчанию для всех пользователей, которые могут войти в систему .
1 Документация mkpasswd гласит:
Не используйте эту команду для создания локального файла /etc /passwd, если он вам действительно не нужен. См. Руководство пользователя Cygwin для получения дополнительной информации.
Я не могу найти никаких веских аргументов в руководстве пользователя, кроме упоминания о том, что вам придется заново создавать файлы /etc /passwd и /etc /group, если ваши пользователи и группы меняются, что, я полагаю, достаточно прилично причина. Я могу сказать, что этот процесс несколько ошибочен для новичков.
Предполагая, что вы заинтересованы в изменении оболочки, используемой в терминале mintty/Cygwin, он сначала проверяет переменную среды SHELL, затем (теперь уже не существует) файл passwd, а затем возвращается к /bin /sh, что, похоже, и делает. по умолчанию.
Мне удалось установить переменную среды SHELL в Windows на /usr/bin/zsh
и она работала без каких-либо других изменений. Я просто изменил его для моего пользователя Windows, а не глобально.
Установка переменной среды, вероятно, различается для разных версий Windows. Попробуйте найти "среду" в панели управления Windows. Для меня в Windows 7 это была Панель управления → Система → Дополнительные параметры системы, которая вызывает панель управления / диалоговое окно "Свойства системы", затем вкладку "Дополнительно", затем кнопку "Переменные среды", которая вызывает диалоговое окно "Переменные среды" и затем создает новая пользовательская переменная с именем SHELL
со значением /usr/bin/zsh
. Тогда хорошо, вернитесь из всего этого и начните новую мяту.
Просто подумал, что добавлю этот ответ на случай, если он поможет любому, кто его ищет. Если вы используете 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, а не в новое окно