Что делать на самом деле довольно просто, когда вы очистите все слои. Это хорошо работает как вызов (не забудьте изменить его в соответствии с вашим конкретным местом установки MSYS2):
set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & "c:\msys64\usr\bin\bash.exe" --login -i
Я лично рекомендую установить оболочку для наследования вашего PATH:
set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & set MSYS2_PATH_TYPE=inherit & "c:\msys64\usr\bin\bash.exe" --login -i
Моя страница настроек задач ConEmu в конечном итоге выглядит следующим образом:
Разбивая все это
MSYS2 любит настраивать оболочку в соответствии с переменными среды, а не параметрами командной строки. Передача параметров в программу таким способом может показаться неестественной на первый взгляд, но в основном она просто следует следующей простой последовательности: set VAR=value & set VAR2=value & "c:\path\to\command" [args]
CHERE_INVOKING
- если установлено в 1, bash запускается в текущем рабочем каталоге, в противном случае он запускается в домашнем каталоге пользователя. Это должно быть установлено в 1
чтобы позволить оболочке работать должным образом из контекстного меню окна проводника.
MSYSTEM
- какую подсистему MSYS2 использовать. Их три: MSYS, MINGW32 и MINGW64. Подсистема MSYS
должна использоваться только для командных операций pacman
поэтому я обычно вызываю ее только при помощи значка меню запуска old-skool в очень редких случаях, когда это необходимо. MINGW32
бесполезен для всех избранных пользователей, и вы наверняка знаете, кто вы есть.
MSYS2_PATH_TYPE
- если снята с охраной MSYS использует минимальную среду PATH
, которая содержит только двоичные файлы MSys и пару выбор пути системы Windows , и является обязательным для режима MSYSTEM=MSYS
оболочки только. Для оболочек MINGW
рекомендуется использовать inherit
- я использую MSYS2_PATH_TYPE=inherit
без проблем в течение многих лет.
Есть еще одна переменная MSYSCON
упомянутая в другом ответе и упоминаемая в msys2_shell.cmd
- игнорируйте ее. Он предназначен только для использования в командном файле msys2_shell.cmd
и не влияет на поведение инициализации оболочки bash.exe или MSYS.
Место установки MSYS2
Путь MSYS2 намеренно жестко задан как c:\msys64\
так как это место установки по умолчанию для установщика MSYS2 Windows. В этом случае не имеет смысла использовать %ConEmuDir%
поскольку он относится к %PROGRAMFILES%
, а MSYS2 обычно устанавливается относительно корневого каталога жесткого диска. Обратите внимание , что это имеет смысл %ConEmuDir%
при обращении к оболочке MSYS2 , которая поставляется с Git для Windows, так что устанавливается %PROGRAMFILES%
Нет простого способа узнать местоположение установки MSYS2. MSYS2 также не настроил переменную окружения, как бы мне этого ни хотелось. Разве не было бы здорово, если бы у MSYS2 была возможность экспортировать что-то вроде MSYSTEM_HOME
в среду вашей машины? Но это не так, поэтому вы, как пользователь, должны знать, где он установлен, и указать ConEmu там.
Что касается msys2_shell.cmd
:
Не используйте это. Пакетный файл имеет неправильное имя. Он должен называться msys2_terminal.cmd
или аналогичным, поскольку на самом деле он настраивает весь терминал для оболочки. Это распространенная ошибка терминологии, особенно в операционных системах Windows, где никогда не было четкого отделения терминала от оболочки. Вот как это работает, объяснено с точки зрения пользователя Windows:
Оболочка - это командный процессор и пакетный / скрипт-бегун. По сути, это приложение командной строки, очень похожее на любое другое приложение командной строки. Оболочка даже не требует никаких видимых оконных или клавиатурных подключений. Он может работать полностью в фоновом режиме над файлами, потоками или другими источниками ввода / вывода данных.
Терминал - это оконное приложение , предоставляющее интерфейс клавиатуры / мыши для программы оболочки. В окнах его часто называют консольным окном. Команды клавиатуры передаются в программу оболочки, а вывод отображается внутри окна с полосами прокрутки, цветным текстом и другими забавными функциями.
В этом сценарии я хочу, чтобы мой терминал был ConEmu, а моя оболочка - BASH (mingw64). Поэтому я хочу, чтобы ConEmu запускал оболочку и только оболочку. Я не хочу, чтобы ConEmu начинал с мяты. Это оба терминала, и это заставит нас получить вторичные всплывающие окна - одно для ConEmu и одно для mintty. Но это именно то, что делает попытка запустить msys2_shell.cmd
. Так что не используйте это.