Windows e Git Bash: Bash PATH per leggere la variabile di sistema% PATH% di Windows


27

Di recente ho aggiunto manualmente una directory al PERCORSO di Windows andando su Pannello di controllo -> Sistema -> Impostazioni di sistema avanzate -> Variabili d'ambiente -> Variabili utente -> PERCORSO. (Windows 7, 64 bit.)

Dopo aver riavviato e avviato cmd.exe, echo %PATH%indica che ha funzionato: vedo la directory che ho aggiunto di recente nell'output.

Tuttavia, dopo aver avviato Git Bash, l'output di echo $PATHnon include questa directory.

Potrei aggiungere il export PATH=$PATH:/c/my/pathmio bashrc ma preferirei che Git Bash ottenga solo PATH da Windows, quindi non devo ricordare di aggiungere percorsi in due posti. Come può essere realizzato?

(Una domanda più generale correlata è, che cosa imposta il $ PATH di Git Bash? Vedo un paio di voci ripetute in luoghi diversi, alcune cose che si trovano in Windows% PATH% sono nel $ PATH di Git Bash ma non altre. Cosa è successo prima Ottengo il prompt di Git Bash che tocca $ PATH?)


Il percorso in questione potrebbe essere importante: C:\cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\bin.
Ahmed Fasih,

Risposte:


6

Una sessione msysgit git bash usa lo script share/WinGit/Git Bash.vbs, che non accede o modifica la variabile d'ambiente PATH(come farebbe in questo script vbs non correlato, per esempio )

Una sessione git bash verrà semplicemente aggiunta di fronte alla tua attuale PATH:

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

È possibile che la sessione mingw impacchettata con msysgit non consideri una binda un'altra installazione mingw: puoi controllarla impostando un'altra directory (più semplice) sulla tua PATHe vedere se è ancora visibile nella tua sessione git bash. In caso contrario, si tratta di un problema più generale che riguarda tutte le directory da aggiungere al PERCORSO.


1
Questo non sembra essere corretto. Quando avvio git bash, il suo percorso viene impostato da un processo che apparentemente converte la variabile PATH di Windows attraverso un processo. Non è semplice come aggiungere elementi extra: ';' viene tradotto in ':', gli identificatori di unità vengono convertiti in nomi di directory e anche altre conversioni stanno avvenendo. In alcuni casi, questa conversione è errata - "c:\Program Files\Java\jdk1.8.0_25"\binnel mio percorso di Windows viene convertito /c/Program Files/Java/jdk1.8.0_25"/binel percorso git bash (nota il primo e l'ultimo carattere mancanti) ... quindi la domanda è: come può accadere?
Jules,

@Jules Questo è davvero possibile. Molto è cambiato in 5 anni.
VonC

5

Ecco la mia piccola soluzione per un problema simile (MSYS2 bash su Windows 10).

L'idea è di convertire i percorsi richiesti in percorsi in stile Unix e aggiungerli a bash $ PATH, tutto fatto in .bashrc.

Non aggiungere i percorsi richiesti per Win PATH. Invece crea un nuovo var env in Windows, come MSYS2_WINPATH, e aggiungi tutte le directory dei percorsi di Windows separate da punto e virgola a questa variabile. Aggiungi% MSYS2_WINPATH% a% PATH%.

Ora inseriscilo nel tuo .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 #################################

Ho provato che in git-bash e ha funzionato senza la soluzione alternativa per .bashrc. Grazie!
Michael Haidl,

bello saperlo :) prego.
Anubhav,

2

Se il valore PATH sarebbe troppo lungo dopo che la variabile PATH dell'utente è stata concatenata sulla variabile PATH dell'ambiente, Windows non riuscirà silenziosamente a concatenare la variabile PATH dell'utente.

Ciò può accadere facilmente dopo l'installazione del nuovo software e l'aggiunta di qualcosa al PERCORSO, interrompendo così il software installato esistente. Windows fallisce!

La soluzione migliore è modificare una delle variabili PATH nel Pannello di controllo e rimuovere le voci non necessarie. Quindi aprire una nuova finestra CMD e vedere se tutte le voci sono visualizzate in "echo% PATH%".


1

Prova a spostare la directory all'inizio della variabile del percorso. Ho avuto lo stesso problema dopo aver installato p4merge. La directory perforce è stata aggiunta al percorso e p4merge è stata trovata da cmd.exe, ma non da git shell (mingw). Dopo una ricerca infruttuosa, ho provato a modificare la variabile in modo che la directory perforce apparisse per prima nel mio percorso. Ho avviato git shell e, voilà, la directory è inclusa nell'output di $ echo $pathe $ p4mergeapre p4merge.

Questa è una specie di risposta scadente, dal momento che non ho idea del perché funzioni, ma se il rimedio aiuta qualcun altro, fantastico.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.