Windows & Git Bash: Bash PATH pour lire la variable système Windows% PATH%


27

J'ai récemment ajouté un répertoire au Windows PATH manuellement en allant dans Panneau de configuration -> Système -> Paramètres système avancés -> Variables d'environnement -> Variables utilisateur -> PATH. (Windows 7, 64 bits.)

Après le redémarrage et le démarrage de cmd.exe, echo %PATH%indique que cela a fonctionné: je vois le répertoire que j'ai récemment ajouté dans la sortie.

Cependant, après avoir démarré Git Bash, la sortie de echo $PATHn'inclut pas ce répertoire.

Je pourrais ajouter export PATH=$PATH:/c/my/pathdans mon bashrc mais je préfère que Git Bash obtienne simplement PATH à partir de Windows, donc je n'ai pas à me rappeler d'ajouter des chemins à deux endroits. Comment cela peut-il être accompli?

(Une question connexe plus générale est de savoir ce qui configure $ PATH de Git Bash? Je vois quelques entrées répétées à différents endroits, certaines choses qui sont dans Windows% PATH% sont dans $ PATH de Git Bash mais pas d'autres. Que se passe-t-il avant Je reçois l'invite Git Bash qui touche $ PATH?)


Le chemin en question pourrait être importante: C:\cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\bin.
Ahmed Fasih

Réponses:


6

Une session msysgit git bash utilise le script share/WinGit/Git Bash.vbs, qui n'accède pas ou ne modifie pas la variable d'environnement PATH(comme ce serait le cas dans ce script vbs sans rapport, par exemple )

Une session git bash ajoutera simplement devant votre courant PATH:

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

Il est possible que la session mingw empaquetée avec msysgit ne tienne pas compte d'une binautre installation mingw: vous pouvez le vérifier en définissant un autre répertoire (plus simple) dans votre PATHet voir s'il est toujours visible dans votre session git bash. Sinon, c'est un problème plus général qui concerne tous les répertoires que vous ajouteriez au PATH.


1
Cela ne semble pas être correct. Lorsque je démarre git bash, son chemin est défini par un processus qui convertit apparemment la variable Windows PATH via un processus. Ce n'est pas aussi simple que d'ajouter des éléments supplémentaires: ';' est traduit en «:», les spécificateurs de lecteur sont convertis en noms de répertoire et d'autres conversions se produisent également. Dans certains cas, cette conversion est incorrecte - "c:\Program Files\Java\jdk1.8.0_25"\bindans mon chemin Windows est converti /c/Program Files/Java/jdk1.8.0_25"/bien chemin git bash (note manquante premier et dernier caractère) ... alors la question est, comment cela se produit-il?
Jules

@Jules C'est vraiment possible. Beaucoup de choses ont changé en 5 ans.
VonC

5

Voici ma petite solution de contournement pour un problème similaire (bash MSYS2 sur Windows 10).

L'idée est de convertir les chemins requis en chemins de style Unix et de les ajouter à bash $ PATH, tout se fait en .bashrc.

N'ajoutez pas les chemins requis à Win PATH. Au lieu de cela, créez un nouveau var env dans Windows, comme MSYS2_WINPATH, et ajoutez tous les répertoires de chemin d'accès Windows séparés par des points-virgules à cette variable. Ajoutez% MSYS2_WINPATH% à% PATH%.

Maintenant, insérez ceci dans votre .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 #################################

J'ai essayé cela dans git-bash et cela a fonctionné sans la solution de contournement pour .bashrc. Merci!
Michael Haidl

bon d'entendre ça :) vous êtes les bienvenus.
anubhav

2

Si la valeur PATH est trop longue après la concaténation de la variable PATH de votre utilisateur sur la variable PATH d'environnement, Windows échouera silencieusement à concaténer la variable PATH utilisateur.

Cela peut facilement se produire après l'installation d'un nouveau logiciel et ajoute quelque chose à PATH, cassant ainsi le logiciel installé existant. Windows échoue!

La meilleure solution consiste à modifier l'une des variables PATH dans le panneau de configuration et à supprimer les entrées dont vous n'avez pas besoin. Ouvrez ensuite une nouvelle fenêtre CMD et voyez si toutes les entrées sont affichées dans "echo% PATH%".


1

Essayez de déplacer le répertoire au début de votre variable de chemin. J'ai eu le même problème que vous après l'installation de p4merge. Le répertoire perforce a été ajouté au chemin et p4merge a été trouvé par cmd.exe, mais pas par git shell (mingw). Après une recherche infructueuse, j'ai essayé de simplement éditer la variable afin que le répertoire perforce apparaisse en premier sur mon chemin. J'ai lancé git shell et, voila, le répertoire est inclus dans la sortie de $ echo $path, et$ p4merge ouvre p4merge.

C'est une sorte de réponse boiteuse, car je ne sais pas pourquoi cela fonctionne, mais si la solution de contournement aide quelqu'un d'autre, tant mieux.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.