зш с Cygwin


Ответы:


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что нужно сделать, но таким образом вы сделаете это для всех пользователей за один раз.)


15
По умолчанию больше нет / etc / passwd в cygwin, и chsh больше не поддерживается. Этот ответ не помогает (10 апреля 2014 г.).
Джефф Снайдер

Иди домой @ THESorcerer, ты пьян
ocodo

2
@JeffSnider запустите mkpasswd -l -p "$(cygpath -H)" > /etc/passwdи отредактируйте только что созданный /etc/passwdфайл
BrunoLM

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

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


17

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

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

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


2
Я должен был использовать /bin/zshвместо zsh.
Крайз

1
the bin directory in the cygwin directory to my Windows Path Environment Variableу меня работает без этого изменения
русло

iне требуется , потому что это будет Войти оболочки и не interactive.
Тимо

7

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


Вместо создания файла 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. Тогда ОК, откажись от всего этого и начни новую мяту.


Теперь это должно быть поддержано обильно! Самый простой способ, который не портит внутренние махинации Cygwin, и легко обратим!
pepoluan

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, а не в новое окно

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.