web-dev-qa-db-fra.com

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

J'ai récemment ajouté manuellement un répertoire à PATH Windows en accédant à 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é à la sortie.

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

Je pourrais ajouter export PATH=$PATH:/c/my/path dans mon répertoire, mais je préférerais que Git Bash obtienne simplement PATH de Windows pour éviter de devoir ajouter des chemins d'accès à deux endroits. Comment cela peut-il être accompli?

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

22
Ahmed Fasih

Une session msysgit git bash utilise le script share/WinGit/Git Bash.vbs , qui n’a pas accès à 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 PATH actuelle:

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

Il est possible que la session mingw fournie avec msysgit ne considère pas une bin provenant d'une autre installation de mingw: vous pouvez le vérifier en définissant un autre répertoire (plus simple) sur votre PATH et voir s'il est toujours visible dans votre session git bash. Si ce n'est pas le cas, il s'agit d'un problème plus général qui concerne tous les répertoires que vous ajouteriez à PATH.

3
VonC

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

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

N'ajoutez pas les chemins requis à Win PATH. Au lieu de cela, créez une nouvelle variable 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 #################################
4
anubhav

Si la valeur PATH est trop longue après la concaténation de la variable PATH de votre utilisateur sur la variable d'environnement PATH, Windows ne pourra pas concaténer en mode silencieux la variable PATH utilisateur.

Cela peut facilement se produire après l’installation d’un nouveau logiciel et l’ajout de quelque chose à PATH, ce qui rompt les logiciels déjà installés. Windows échoue!

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

2
Tony OHagan

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 modifier la variable pour 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 réponse un peu boiteuse, car je ne comprends pas pourquoi cela fonctionne, mais si le contournement aide quelqu'un d'autre, tant mieux.

1
gilly3