Windows & Git Bash: Bash PATH zum Lesen der Systemvariablen Windows% PATH%

46036
Ahmed Fasih

Ich habe vor kurzem manuell ein Verzeichnis zum Windows PATH hinzugefügt, indem Sie in Systemsteuerung -> System -> Erweiterte Systemeinstellungen -> Umgebungsvariablen -> Benutzervariablen -> PATH gehen. (Windows 7, 64-Bit)

Nach dem Neustart und Starten von cmd.exe wird echo %PATH%angezeigt, dass dies funktioniert hat: Ich sehe das Verzeichnis, das ich kürzlich in der Ausgabe hinzugefügt habe.

Nach dem Start von Git Bash echo $PATHenthält dieses Verzeichnis jedoch nicht die Ausgabe von .

Ich könnte export PATH=$PATH:/c/my/pathin meinem bashrc hinzufügen, aber ich möchte lieber, dass Git Bash nur PATH von Windows erhält, sodass ich nicht daran denken muss, Pfade an zwei Stellen hinzuzufügen. Wie kann das erreicht werden?

(Eine allgemeinere verwandte Frage ist, was Git Bashs $ PATH einrichtet. Ich sehe einige Einträge, die an verschiedenen Stellen wiederholt werden, einige Dinge in Windows% PATH% sind in Git Bashs $ PATH enthalten, andere jedoch nicht. Was passiert bisher? Ich erhalte die Git Bash-Eingabeaufforderung, die $ PATH berührt.

19
Der fragliche Pfad könnte wichtig sein: `C: \ cygwin \ usr \ x86_64-w64-mingw32 \ sys-root \ mingw \ bin`. Ahmed Fasih vor 10 Jahren 0

4 Antworten auf die Frage

3
VonC

Eine msysgit git bash-Sitzung verwendet das Skript share/WinGit/Git Bash.vbs, das nicht auf die Umgebungsvariable zugreift oder diese ändert PATH(wie dies beispielsweise in diesem nicht verwandten VBS-Skript der Fall wäre ).

Eine git bash-Sitzung wird einfach vor Ihrem aktuellen hinzugefügt PATH:

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

Es ist möglich, dass die mit msysgit gepackte mingw-Sitzung bineine Installation aus einer anderen mingw-Installation nicht berücksichtigt : Sie können dies überprüfen, indem Sie ein anderes (einfacheres) Verzeichnis für Ihr System festlegen und prüfen, PATHob es in Ihrer git bash-Sitzung noch sichtbar ist. Wenn nicht, handelt es sich um ein allgemeineres Problem, das alle Verzeichnisse betrifft, die Sie dem PATH hinzufügen würden.

Das scheint nicht richtig zu sein. Wenn ich git bash starte, wird der Pfad von einem Prozess festgelegt, der die Windows-Variable PATH anscheinend durch einen Prozess konvertiert. Es ist nicht so einfach wie das Hinzufügen zusätzlicher Elemente: ';' wird in ':' übersetzt, Laufwerksspezifizierer werden in Verzeichnisnamen konvertiert und einige andere Konvertierungen finden ebenfalls statt. In einigen Fällen ist diese Konvertierung falsch - `" c: \ Programme \ Java \ jdk1.8.0_25 "\ bin" in meinem Windows-Pfad wird in `/ c / Programme / Java / jdk1.8.0_25" / konvertiert. bi` im git bash path (Hinweis fehlt erster und letzter Buchstabe) ... also die Frage ist, wie das passiert? Jules vor 6 Jahren 1
@Jules Das ist in der Tat möglich. In 5 Jahren hat sich viel verändert. VonC vor 6 Jahren 0
3
anubhav

Hier ist meine kleine Problemumgehung für ein ähnliches Problem (MSYS2-bash unter Windows 10).

Die Idee ist, die erforderlichen Pfade in Unix-Pfade zu konvertieren und sie an bash $ PATH anzuhängen, alles in .bashrc.

Hängen Sie die erforderlichen Pfade nicht an Win PATH an. Erstellen Sie stattdessen in Windows eine neue Umgebungsvariable wie MSYS2_WINPATH, und hängen Sie alle durch Semikolons getrennten Windows-Pfadverzeichnisse an diese Variable an. Hängen Sie% MSYS2_WINPATH% an% PATH% an.

Fügen Sie dies in Ihre .bashrc ein -

################################## 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 ################################# 
Habe das in git-bash ausprobiert und es funktionierte ohne den Workaround für .bashrc. Vielen Dank! Michael Haidl vor 6 Jahren 0
gut zu hören das :) du bist willkommen. anubhav vor 6 Jahren 0
2
Tony OHagan

Wenn der PATH-Wert zu lang wäre, nachdem die PATH-Variable des Benutzers mit der Umgebungs-PATH-Variable verkettet wurde, kann die PATH-Variable des Benutzers nicht automatisch verkettet werden.

Dies kann leicht passieren, nachdem neue Software installiert wurde und PATH etwas hinzufügt, wodurch die bereits installierte Software beschädigt wird. Windows scheitern!

Die beste Lösung ist, eine der PATH-Variablen in der Systemsteuerung zu bearbeiten und nicht benötigte Einträge zu entfernen. Öffnen Sie dann ein neues CMD-Fenster und prüfen Sie, ob alle Einträge in "echo% PATH%" angezeigt werden.

1
gilly3

Verschieben Sie das Verzeichnis an den Anfang Ihrer Pfadvariablen. Ich hatte das gleiche Problem wie Sie nach der Installation von p4merge. Das Perforce-Verzeichnis wurde dem Pfad hinzugefügt und p4merge wurde von cmd.exe gefunden, nicht jedoch git shell (mingw). Nach einer erfolglosen Suche habe ich versucht, die Variable so zu bearbeiten, dass das Perforce-Verzeichnis zuerst in meinem Pfad angezeigt wurde. Ich habe git shell gestartet und, voila, das Verzeichnis ist in der Ausgabe von enthalten $ echo $pathund $ p4mergeöffnet p4merge.

Dies ist eine Art lahme Antwort, da ich keine Ahnung habe, warum es funktioniert, aber wenn das Work-around jemand anderen hilft, großartig.