11

Я хочу изменить стандартную оболочку MSYS2 с bash на zsh .

Я пробовал chsh - не доступно в MSYS2.
Редактирование /etc/passwd ничего не делает. Кажется, это игнорируется.

Я взглянул на пакетные сценарии в корневом каталоге MSYS2, и bash жестко запрограммирован. Я изменил каждый /usr/bin/bash на /usr/bin/zsh , который работал нормально, пока я не попытался использовать MinGW.

Где я могу изменить оболочку MSYS2 (правильно), если это вообще возможно?

6 ответов6

15

Я столкнулся с этим, используя более новую версию msys2-launcher, которая предоставляет средства запуска .exe а не пакетные файлы.

Для этого нужно было просто изменить файлы .ini вместе со средствами запуска внутри корневого каталога Msys2 (для 64-разрядной установки он может содержать msys2.ini , mingw32.ini и mingw64.ini). Для каждого из этих INI-файлов добавьте строку для установки оболочки:

SHELL=/usr/bin/zsh
7

Я просто столкнулся с этой проблемой. Чтобы запустить zsh, я сделал это:

  • Установлен MSYS2
  • Из каталога, в котором я установил MSYS2, я запустил mingw32_shell.bat
  • Обновил все установленные пакеты, запустив pacman -Syu
  • Установил zsh и curl, запустив pacman -Sy zsh curl
  • Закрыл оболочку MinGW, запустив exit - я не запустил zsh сразу после установки.
  • Отредактировал msys2_shell.bat, mingw32_shell.bat и mingw64_shell.bat и изменил каждый экземпляр:start %WD%mintty -i /msys2.ico /usr/bin/bash --login %* до:start %WD%mintty -i /msys2.ico /usr/bin/zsh --login %* (в строке 39 по состоянию на 2015-09-23)
  • Побежал mingw32_shell.bat
  • В меню конфигурации zsh я выбираю 0 чтобы создать файл .zshrc.

Когда конфигурация закончилась, я увидел:

zsh-newuser-install:1119: command not found: rm

Это выглядело неправильно ... поскольку rm никогда не должен быть найден в здоровой системе * nix (я полагаю, это ошибка в пакете MSYS2 для zsh), но после этого все работало нормально.

В первый раз, когда я попытался сделать это, запустив пакетный файл, чтобы создать новый сеанс, я получил сообщение об ошибке, когда пространство памяти zsh уже занято. Чтобы это исправить , я закрыл все открытые окна MinTTY и запускал файл autorebase.bat в каталоге установки MSYS2. После этого все заработало.

Затем я установил ой-мой-zsh. С помощью:

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

4

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

Например, просто напишите zsh в ~/.bashrc , и когда bash запустится, он запустит zsh для вас. Как бы то ни было, запускается случайный процесс bash, и вам нужно дважды выходить из оболочки при выходе из системы. Чтобы сделать это лучше, напишите exec zsh вместо zsh , таким образом, процесс bash полностью заменен процессом zsh.

Этот метод не идеален, но в большинстве случаев он должен работать хорошо. По сравнению с изменением жестко закодированных значений это может вызвать меньше проблем с совместимостью.

Впервые упоминается в этом ответе о StackOverflow.

4

Отредактируйте /etc/nsswitch.conf и измените настройку ниже:

db_shell: /bin/zsh
2

В моей установке не было файлов, упомянутых в принятом ответе (msys2_shell.bat , mingw32_shell.bat и mingw64_shell.bat).

Вместо этого моя MS102 для установки системы Win10 (с использованием установочного файла msys2-x86_64-20161025.exe) содержит один файл msys2_shell.cmd со строкой:

set "LOGINSHELL=bash"

Я изменил bash на zsh . Кажется, работает до сих пор.

1

У меня есть решение, но оно требует, чтобы вы использовали ConEmu вместо любого другого терминала, который вы используете в настоящее время. Попробуйте, хотя, на мой взгляд, это лучшее терминальное приложение для Windows.

Прежде всего, вам нужно установить zsh с помощью pacman. Я думаю, вы уже достигли этого. Затем вам нужно будет установить ConEmu (что вы можете сделать с Chocolatey или просто скачав установщик с сайта conemu). В настройках ConEmu в разделе «Задачи» необходимо добавить новую задачу. Возможно, он уже имеет Bash::Msys2-64 или что-то в этом роде, так что, возможно, вы Zsh::Msys2-64 . Название произвольно в любом случае. В поле «Команды» для этой новой задачи вы можете скопировать команду из Bash::Msys2-64 и заменить zsh.exe там, где это необходимо. Мой, как:

set CHERE_INVOKING=1 & %ConEmuDrive%\msys64\usr\bin\zsh.exe --login -i -new_console:C:"%ConEmuDrive%\msys64\msys2.ico"

Затем в опциях «Запуск» в ConEmu вы можете установить это в качестве задачи запуска, чтобы при открытии ConEmu вы всегда попадали прямо в Zsh. Очевидно, что вы также можете установить комбинацию клавиш, чтобы открыть ее или любую другую задачу на новой вкладке или что угодно. ConEmu имеет множество вариантов, поэтому я уверен, что вы сможете настроить его так, как вам нравится.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .