O que fazer é realmente muito simples, uma vez que você descasque todas as camadas. Isso funciona bem como uma invocação (certifique-se de modificá-lo para o local de instalação específico do MSYS2):
set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & "c:\msys64\usr\bin\bash.exe" --login -i
Eu pessoalmente recomendaria configurar o shell para herdar seu PATH:
set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & set MSYS2_PATH_TYPE=inherit & "c:\msys64\usr\bin\bash.exe" --login -i
A página de configurações do meu ConEmu Tasks acaba ficando assim:
Quebrandotudoabaixo
OMSYS2gostadeconfiguraroshelldeacordocomasvariáveisdeambiente,emvezdosparâmetrosdalinhadecomando.Passaropçõesparaumprogramadessamaneirapodeparecerpouconaturalnocomeço,masbasicamentesegueapenasessasériesimples:setVAR=value&setVAR2=value&"c:\path\to\command" [args]
-
CHERE_INVOKING
- se definido como 1, o bash começa no diretório de trabalho atual, caso contrário, ele é iniciado no diretório inicial do usuário. Isso precisa ser definido como 1
para permitir que o shell funcione conforme o esperado no menu de contexto da Janela do Explorer.
-
MSYSTEM
- qual sub-sistema MSYS2 deve ser usado. Existem três: MSYS, MINGW32 e MINGW64. O subsistema MSYS
deve ser usado apenas para as operações do comando pacman
e, por isso, normalmente só invoco isso por meio do ícone do menu Iniciar do old-skool, na ocasião em que é necessário. MINGW32
é inútil para todos por alguns usuários selecionados e você sabe quem já é, provavelmente.
-
MSYS2_PATH_TYPE
- se o MSYS não configurado usar um ambiente PATH
mínimo que contenha apenas binários MSYS e alguns caminhos de sistema do Windows e é um modo obrigatório para MSYSTEM=MSYS
shell somente . Para MINGW
shells, é recomendado usar inherit
- Eu tenho usado MSYS2_PATH_TYPE=inherit
sem problemas há anos.
Existe outra variável MSYSCON
mencionada por outra resposta e referenciada em msys2_shell.cmd
- ignore-a. É somente para uso dentro do arquivo de lote msys2_shell.cmd
e não tem qualquer influência sobre o comportamento da inicialização do shell bash.exe ou MSYS.
Local de instalação do MSYS2
O caminho MSYS2 foi intencionalmente codificado como c:\msys64\
, pois esse é o local de instalação padrão do instalador do MSYS2 Windows. Não faz sentido, neste caso, usar %ConEmuDir%
, já que é relativo a %PROGRAMFILES%
, e MSYS2 é mais tipicamente instalado em relação ao diretório raiz do disco rígido. Note que faz sentido usar %ConEmuDir%
ao referenciar o shell MSYS2 que vem com o Git para Windows , já que é instalado em relação a %PROGRAMFILES%
.
Não existe uma maneira fácil de saber o local de instalação do MSYS2. Não há nenhuma variável de ambiente configurada pelo MSYS2, tanto quanto eu gostaria que houvesse. Não seria ótimo se o MSYS2 tivesse uma opção para exportar algo que dependesse de MSYSTEM_HOME
para o ambiente de sua máquina? Mas isso não acontece, então é inteiramente de você, como usuário, saber onde está instalado e apontar o ConEmu para lá.
Em relação a msys2_shell.cmd
:
Não use. O arquivo em lotes é incorretamente nomeado. Ele deve ser chamado de msys2_terminal.cmd
ou similar, pois o que está realmente fazendo é configurar um terminal inteiro para o shell . Este é um erro comum de terminologia, especialmente em sistemas operacionais Windows, onde nunca houve uma separação clara entre terminal do shell . Veja como isso funciona, explicado a partir de uma perspectiva do usuário do Windows:
-
Shell - este é o processador de comandos e o runner de lote / script. É essencialmente um aplicativo de linha de comando muito parecido com qualquer outro aplicativo de linha de comando. Um shell não requer sequer nenhuma janela visível ou conexões de teclado. Ele pode operar inteiramente em segundo plano em arquivos, fluxos ou outras fontes de entrada / saída de dados.
-
Terminal - este é um aplicativo em janelas que fornece uma interface de teclado / mouse para o programa shell . No Windows, ela é geralmente chamada de Janela do Console . Os comandos do teclado são canalizados para o programa shell e a saída é exibida dentro da janela com barras de rolagem, texto colorido e outros recursos divertidos.
Neste cenário, quero que meu terminal seja ConEmu e meu shell seja BASH (mingw64) . Portanto, quero que ConEmu inicie o shell e somente o shell. Não quero que o ConEmu inicie mintty . Esses são dois terminais e isso nos levaria a obter janelas pop-up secundárias - uma para o ConEmu e outra para o mintty. Mas é exatamente isso que tentar executar o msys2_shell.cmd
será suficiente. Então não use isso.