Установить оболочку по умолчанию в Cygwin



Я использую Cygwin для довольно долгое время сейчас. Теперь я хочу переключиться на рыбу из Баша. Все говорят, что вы должны использовать chsh -s /usr/bin/fish, но по какой-то причине chsh не работает для меня. Попытка изменить мой файл Cygwin.bat также не работает, как и изменение моего файла /etc/passwd.



Я действительно не понимаю, что происходит. Может кто-то пожалуйста, помогите мне?
720   6  

6 ответов:

Я случайно сталкиваюсь с той же проблемой, и теперь я предоставляю вам свое решение.

0-открыть cygwin по mintty.exe

1-Сборка файла passwd вручную (mkpasswd)

$mkpasswd > /etc/passwd

2-изменить оболочку по умолчанию в файле passwd

$vim /etc/passwd
user:*:1976XX:1971XX:U-user\user,S-1-5-21-XXXX:/home/user:/bin/fish

3-перезапуск mintty.exe

Попробуйте отредактировать файл / etc / nsswitch.conf вместо /etc / passwd

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

db_shell: /usr/bin/fish

Обратная сторона этого метода заключается в том, что, если у вас есть несколько пользователей, это изменение затрагивает их всех. Верх/верх - это то, что все очень просто. Единственная загвоздка в том, что вам нужно перезапустить Cygwin.

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


Ссылки

1 в документации mkpasswd говорится следующее:

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

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

Есть ответ на суперпользователя, который еще проще. Задайте переменную среды оболочки в Windows. Установите его в предпочтительную оболочку (например, /bin/tcsh), и вновь запущенные оболочки должны использовать его.

Для задания переменных окружения:

  1. перейдите в Панель управления " Система "(щелкните правой кнопкой мыши на меню Пуск и выберите пункт "Система")
  2. нажмите на кнопку "Дополнительные Системные настройки" в левой колонке
  3. в появившемся окне" Свойства системы " нажмите кнопку "переменная окружения..."кнопка
  4. в поле" пользовательские переменные "или" системные переменные "(в зависимости от того, хотите ли вы, чтобы изменение коснулось только вас или всех пользователей) нажмите кнопку " Создать..." кнопка.
  5. введите "SHELL" в поле "имя переменной" и путь (относительно файловой системы Cygwin) к вашей предпочтительной оболочке в поле "значение переменной".
  6. Нажмите кнопку ОК в трех открытых окнах, чтобы сохранить изменения.

Я не уверен, насколько это "правильное" решение, но я только что добавил /usr/bin/zsh; exit в нижнюю часть моего файла .bashrc. Вы можете заменить /usr/bin/zsh путь к выбранной вами оболочке. Похоже, пока все идет нормально.

Если вы запускаете Cygwin через ConEmu, я нашел самый простой способ-заменить командную строку для запуска fish вместо оболочки по умолчанию (Settings - >Startup - >Tasks ): ""c:\cygwin64\bin\fish.exe" --login -i" (пожалуйста, измените путь к вашей папке cygwin соответственно)

Перейдите в c:\cygwin или c:\cygwin64 (каков бы ни был ваш домашний каталог cygwin) и отредактируйте cygwin.bat. Вместо

bash --login -i

Напишите, например,

rem bash --login -i
tcsh -l

Comments

    Ничего не найдено.