Windows & Git Bash: Bash PATH para ler a variável de sistema do Windows% PATH%


27

Recentemente, adicionei um diretório ao PATH do Windows manualmente, indo ao Painel de Controle -> Sistema -> Configurações avançadas do sistema -> Variáveis ​​de ambiente -> Variáveis ​​de usuário -> PATH. (Windows 7, 64 bits.)

Após reiniciar e iniciar o cmd.exe, echo %PATH%indica que funcionou: Vejo o diretório que adicionei recentemente na saída.

No entanto, após iniciar o Git Bash, a saída de echo $PATHnão inclui esse diretório.

Eu poderia adicionar export PATH=$PATH:/c/my/pathno meu bashrc, mas prefiro que o Git Bash obtenha o PATH no Windows, para que não me lembre de adicionar caminhos a dois lugares. Como pode ser isto alcançado?

(Uma pergunta relacionada mais geral é: o que configura o $ PATH do Git Bash? Vejo algumas entradas repetidas em lugares diferentes, algumas coisas que estão no Windows% PATH% estão no $ PATH do Git Bash, mas não outras. O que tudo acontece antes Recebo o prompt do Git Bash que toca em $ PATH?)


O caminho em questão pode ser importante: C:\cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\bin.
Ahmed Fasih

Respostas:


6

Uma sessão msysgit git bash usa o script share/WinGit/Git Bash.vbs, que não acessa ou modifica a variável de ambiente PATH(como faria neste script vbs não relacionado, por exemplo )

Uma sessão do git bash simplesmente adiciona antes do seu atual PATH:

.:/usr/local/bin:/mingw/bin:/bin:

É possível que a sessão mingw empacotada com o msysgit não considere uma bininstalação de outra mingw: você pode verificá-la definindo outro diretório (mais simples) para o seu PATHe ver se ele ainda está visível na sua sessão do git bash. Caso contrário, é uma questão mais geral que diz respeito a todos os diretórios que você adicionaria ao PATH.


11
Isso não parece estar correto. Quando inicio o git bash, seu caminho é configurado por algum processo que aparentemente converte a variável PATH do Windows através de algum processo. Não é tão simples quanto adicionar itens extras: ';' é traduzido para ':', os especificadores de unidade são convertidos em nomes de diretório e algumas outras conversões também estão acontecendo. Em alguns casos, essa conversão está errada - "c:\Program Files\Java\jdk1.8.0_25"\binno caminho do Windows é convertido /c/Program Files/Java/jdk1.8.0_25"/bino caminho do bash do git (observe a falta do primeiro e do último caractere) ... então a pergunta é: como isso acontece?
Jules

@ Jules Isso é realmente possível. Muita coisa mudou em 5 anos.
VonC 23/03/19

5

Aqui está minha pequena solução alternativa para um problema semelhante (MSYS2 bash no Windows 10).

A idéia é converter os caminhos necessários em caminhos no estilo Unix e anexá-los ao bash $ PATH, tudo feito em .bashrc.

Não anexe os caminhos necessários ao Win PATH. Em vez disso, crie uma nova var env no Windows, como MSYS2_WINPATH, e anexe todos os diretórios de caminho do Windows separados por ponto e vírgula a essa variável. Acrescente% MSYS2_WINPATH% a% PATH%.

Agora insira isso no seu .bashrc -

################################## Construct PATH variable ##################################

winpath=$(echo $MSYS2_WINPATH | tr ";" "\n" | sed -e 's/\\/\\\\/g' | xargs -I {} cygpath -u {})
unixpath=''

# Set delimiter to new line
IFS=$'\n'

for pth in $winpath; do unixpath+=$(echo $pth)":"; done

export PATH=$(echo $PATH:$unixpath | sed -e 's/:$//g')
unset IFS
unset unixpath
unset winpath

################################# Constructed PATH variable #################################

Tentei isso no git-bash e funcionou sem a solução alternativa para .bashrc. Obrigado!
Michael Haidl

bom ouvir isso :) de nada.
Anubhav 10/04

2

Se o valor PATH for muito longo após a concatenação da variável PATH do usuário na variável PATH do ambiente, o Windows silenciosamente falhará ao concatenar a variável PATH do usuário.

Isso pode acontecer facilmente após a instalação de um novo software e adiciona algo ao PATH, interrompendo o software instalado existente. Windows falhar!

A melhor solução é editar uma das variáveis ​​PATH no Painel de Controle e remover as entradas desnecessárias. Em seguida, abra uma nova janela do CMD e veja se todas as entradas são mostradas em "echo% PATH%".


1

Tente mover o diretório para o início da sua variável de caminho. Eu tive o mesmo problema que você depois de instalar o p4merge. O diretório perforce foi adicionado ao caminho e o p4merge foi encontrado pelo cmd.exe, mas não pelo git shell (mingw). Após uma pesquisa infrutífera, tentei apenas editar a variável para que o diretório perforce aparecesse primeiro no meu caminho. Eu iniciei o git shell e, voila, o diretório está incluído na saída do $ echo $pathe $ p4mergeabre o p4merge.

Essa é uma resposta meio esfarrapada, já que eu não sei o porquê disso funcionar, mas se a solução alternativa ajudar outra pessoa, ótimo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.