Как изменить стандартную оболочку в Cygwin?

29

Я пытаюсь изменить оболочку по умолчанию с bash на zsh в cygwin.

  1. Обычная команда unix chshнедоступна в cygwin
  2. Файл etc / passwd, кажется, больше не используется в существующих версиях cygwin.

Так как еще можно изменить оболочку по умолчанию?

gyaani_guy
источник

Ответы:

22

Ответ зависит от того, как вы запустите Cygwin.

Если вы запускаете Cygwin с Cygwin.bat , измените последнюю строку /Cygwin.bat(обычно C:\cygwin\или C:\cygwin64\).

Если вы запустите Cygwin с помощью mintty , то добавьте оболочку в качестве параметра. mintty /usr/bin/zsh -

Стивен
источник
2
Спасибо, я использую Conemu. Если бы изменить , sh.exeчтобы zsh.exeв настройках Conemu> запуск> Задачи> Баш Cygwin Bash>set CHERE_INVOKING=1 & %ConEmuDrive%\CygWin\bin\sh.exe --login -i
gyaani_guy
@gyaani_guy Я просто использую ConEmu для выполнения CygWin\bin\zsh.exe. sh.exe --loginзапустит Bash, как вы это измените? Или это все равно не имеет значения? Я предполагаю, sh.exe --loginчто излишне выполняется shраньше zsh...
deed02392
@ deed02392 Я не уверен, что понимаю ... но точная команда, которую я использую - set CHERE_INVOKING=1 & %ConEmuDrive%\CygWin\bin\zsh.exe --login -ihth
gyaani_guy
@gyaani_guy спасибо, я был сбит с толку, потому что в своем первом комментарии вы подразумевали, что начинаете с zsh sh.exe. Теперь я понимаю, что просто не правильно прочитал ваше сообщение :-)
deed02392
3
Мятный пример не совсем сработал для меня. У него были проблемы, пока я не сделал его оболочкой входа, добавив -l: mintty.exe -i /Cygwin-Terminal.ico /usr/bin/zsh -l -
Морган, май
18

Если вы запускаете mintty.exeнапрямую или запускаете Cygwin Terminal из меню «Пуск» или с рабочего стола (это ярлык mintty.exe), вы можете установить для переменной среды SHELL в Windows значение /usr/bin/zsh.

В Windows 7:

  1. Нажмите клавишу Windows.
  2. Начните вводить «окружение».
  3. Когда он появится, выберите «Изменить переменные среды для вашей учетной записи».

Остальное должно быть самоочевидным.

dc46and2
источник
5
Это серьезно нуждается в большем количестве голосов. Я никогда не видел это нигде, и это, очевидно, предполагаемый метод.
Кевин Миллс
1
Для тех, кто не хочет полагаться на поиск, чтобы найти соответствующую панель, щелкните правой кнопкой мыши меню «Пуск» и выберите «Система», чтобы запустить панель управления системой. Затем нажмите «Расширенные настройки системы» в левом столбце. В открывшемся окне «Свойства системы» нажмите «Переменные среды ...», чтобы запустить редактор переменных среды.
Дэвид С.
Работал отлично!
bkunzi01
16

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


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

db_shell: / usr / bin / fish

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

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


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

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

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

P папа
источник
7

Это хак: поместите это как первую строку вашего ~/.bash_profile:

exec zsh
Гленн Джекман
источник