it-swarm.com.de

Windows & Git Bash: Bash PATH, um die Systemvariable Windows% PATH% zu lesen

Kürzlich habe ich dem Windows-PFAD manuell ein Verzeichnis hinzugefügt, indem ich in die Systemsteuerung -> System -> Erweiterte Systemeinstellungen -> Umgebungsvariablen -> Benutzervariablen -> PFAD gegangen bin. (Windows 7, 64-Bit)

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

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

Ich könnte export PATH=$PATH:/c/my/path in meinen bashrc einfügen, aber ich würde lieber Git Bash von Windows bekommen, damit ich nicht daran denken muss, Pfade zu zwei Stellen hinzuzufügen. Wie kann das erreicht werden?

(Eine allgemeinere Frage ist, wie Git Bashs $ PATH eingerichtet wird. Ich sehe ein paar Einträge, die an verschiedenen Stellen wiederholt werden. Einige Dinge in Windows% PATH% befinden sich in Git Bashs $ PATH, andere nicht. Was alles passiert vorher Ich bekomme die Git Bash-Eingabeaufforderung, die $ PATH berührt?)

22
Ahmed Fasih

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

Eine Git-Bash-Sitzung wird einfach vor Ihrer aktuellen PATH hinzugefügt:

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

Es ist möglich, dass die mit msysgit gepackte mingw-Sitzung keine bin aus einer anderen mingw-Installation berücksichtigt: Sie können dies überprüfen, indem Sie ein anderes (einfacheres) Verzeichnis für Ihre PATH festlegen und prüfen, ob 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.

3
VonC

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

Die Idee ist, die erforderlichen Pfade in Pfade im Unix-Stil umzuwandeln und sie an die Bash-Datei $ PATH anzuhängen, die alle in .bashrc erstellt wurde.

Fügen Sie die erforderlichen Pfade nicht an Win PATH an. Erstellen Sie stattdessen eine neue Umgebungsvariable in Windows, z. B. 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 nun in Ihre .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

Wenn der PATH-Wert zu lang ist, nachdem die PATH-Variable Ihres Benutzers mit der Umgebungs-PATH-Variable verknüpft wurde, kann Windows die PATH-Variable des Benutzers nicht automatisch verknüpfen.

Dies kann leicht passieren, nachdem eine neue Software installiert wurde und etwas zu PATH hinzugefügt wurde, wodurch vorhandene installierte Software beschädigt wird. Windows schlägt fehl!

Die beste Lösung besteht darin, 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.

2
Tony OHagan

Versuchen Sie, das Verzeichnis an den Anfang Ihrer Pfadvariablen zu verschieben. 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 von 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 $ echo $path enthalten, und $ p4merge öffnet p4merge.

Dies ist eine Art lahme Antwort, da ich keine Ahnung habe, warum es funktioniert, aber wenn die Umgehung jemand anderem hilft, großartig.

1
gilly3