Изменить оболочку по умолчанию на MSYS2


14

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

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

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

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

Ответы:


8

Я просто столкнулся с этой проблемой. Чтобы запустить 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 никогда не должно быть net (я предполагаю, что это ошибка в пакете MSYS2 для zsh), но после этого все работало нормально.

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

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

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


Я пытался сделать в основном этот метод, и я не мог заставить рыбу работать без ошибок.
— leetNightshade

1
На rmсамом деле действительно невиновен. Конец /usr/share/zsh/functions/Newuser/zsh-newuser-installскрипта содержит rm -f $tmpfile*для очистки после себя. Это точно так же в моей текущей установке Fedora /usr/share/zsh/5.7.1/functions/zsh-newuser-install.
— Ferd

24

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

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

SHELL=/usr/bin/zsh

Это прямой способ установки zshв качестве оболочки. Для настройки oh-my-zsh можно рассмотреть этот метод - skelнасколько я понимаю, эта часть не относится к msys2.
— TNT

1
Это правильный ответ для новой версии msys2 по состоянию на июль 2018 года. Принятый ответ больше не работает.
— GaryO

больше не работает (14/03/19)
— отпустить

5

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

db_shell: /bin/zsh

Это работает, но кажется довольно хакерской версией решения Алана Пирса.
— TNT

Я не мог заставить это работать, пытаясь использовать рыбу.
— leetNightshade

Я нашел этот ответ и здесь: github.com/elieux/msys2-launcher/issues/… но ответ Алана Пирса кажется более приятным. Обе работы , хотя, и вы также можете установить оболочку внутри msys2_shell.cmdфайла летучей мыши, но изменить его в .cmdфайле не влияет на оболочку , если вы должны начать с одного из .exeс
— Хосе

4

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

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

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

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


Ничего приятного или необычного в этом нет, но это работает с наименьшей суетой.
— leetNightshade

3

Моя установка ничего не есть файлы , указанные в общепринятом ответ ( msys2_shell.bat, mingw32_shell.batи mingw64_shell.bat).

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

set "LOGINSHELL=bash"

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


ваше решение не работает для меня на Win7 вы делали другие вещи после этого?
— Отпуск

1
Извините, у меня нет дополнительной информации. Я перешел на WSL, который работает для моих нужд. Удачи.
— кстианский

это работало для меня на win10
— Хосе

однако, если вам нужно запустить msys2 из одного из .exeфайлов, это не установит оболочку, для этого взгляните на ответ Алана Пирса
— Хосе

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 имеет множество вариантов, поэтому я уверен, что вы сможете настроить его так, как вам нравится.


0

Разработчики MSYS2, очевидно, продолжают изменять свои настройки, потому что в новейших установках msys2_shellкоманда, установленная в Windows для запуска среды MSYS2, принимает -shellаргумент.

Таким образом, чтобы использовать другую оболочку, вы можете отредактировать Свойства одного или нескольких пусковых программ для MSYS2 / MinGW 32 / MinGW 64 и обновить целевой объект для добавления -shell zshили чего-либо еще. (Если оболочки $PATHдля среды MSYS достаточно, вам не нужен полный путь.)

Так, например, для запуска «MSYS2 MinGW 64-bit» в «MSYS2 64bit» в моем меню «Пуск» Win7:

Перед
Цель: C:\msys64\msys2_shell.cmd -mingw64
После
Цель: C:\msys64\msys2_shell.cmd -mingw64 -shell zsh

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

Как ни странно, программы запуска не учитывают никакие переменные окружения, записи реестра и т. Д. Если -shellв командной строке не передано значение для переопределения, будет использоваться LOGINSHELL=bashзначение по умолчанию, которое оно изначально принудительно использует.


0

РЕДАКТИРОВАТЬ: ниже относится к более ранним версиям MSYS2. По состоянию на 2020-01-21 это больше не требуется. Ответ FeRD, кажется, работает лучше всего.

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

Лучше всего была идея WZD о запуске exec fishв первую очередь, когда начинается bash. Однако все еще оставалась проблема: если я хотел использовать bash, мне нужно было отредактировать, .bashrcчтобы удалить эту строку, потому что даже если я запустил ее с рыбы, он просто запустил бы другой экземпляр рыбы.

Лучше всего убедиться, что он exec fishзапускается при запуске msys2, но не при каждом запуске bash.

Я нашел путь через файл msys2_shell.cmdв папке установки msys2. Я нашел эти строки:

set SHELL_ARGS=

:collectparams

if not "x%~1" == "x" set SHELL_ARGS=%SHELL_ARGS% %1& shift& goto :collectparams

Кажется, они определяют параметры для передачи в bash, как только он начинается, но только тогда, когда этот скрипт выполняется (в отличие от .bashrc). Поэтому я добавил эту строку сразу после:

set SHELL_ARGS=%SHELL_ARGS% -c "exec fish"

Кажется, все хорошо. Запуск msys2 заменяет bash на fish, как только первая заканчивает загрузку, но если мне нужна командная строка bash, я все равно могу просто начать ее bash.

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