Изменить оболочку по умолчанию на 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)"

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

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

Okonomiyaki3000
источник
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значение по умолчанию, которое оно изначально принудительно использует.

FERD
источник
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.

Джордж Т
источник