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

27

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)

Zeigt nach dem Neustart und dem Starten von cmd.exe an, echo %PATH%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 $PATHdieses Verzeichnis jedoch nicht.

Ich könnte export PATH=$PATH:/c/my/pathmeinen bashrc hinzufügen, aber ich möchte lieber Git Bash nur PATH von Windows erhalten, 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 erhalte die Git Bash-Eingabeaufforderung, die $ PATH berührt?)

Ahmed Fasih
quelle
Der Weg in Frage könnte wichtig sein: C:\cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\bin.
Ahmed Fasih

Antworten:

6

In einer msysgit git bash-Sitzung wird das Skript verwendet 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 ).

Bei einer Git-Bash-Sitzung wird einfach Folgendes vor Ihre aktuelle hinzugefügt PATH:

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

Es ist möglich, dass die mit msysgit gepackte Mingw-Sitzung keine von einer binanderen Mingw-Installation berücksichtigt : Sie können dies überprüfen, indem Sie ein anderes (einfacheres) Verzeichnis auf Ihr Verzeichnis setzen PATHund 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.

VonC
quelle
1
Das scheint nicht richtig zu sein. Wenn ich git bash starte, wird sein Pfad von einem Prozess eingerichtet, der anscheinend die Windows PATH-Variable durch einen Prozess konvertiert. Es ist nicht so einfach, zusätzliche Elemente hinzuzufügen: ';' wird in ':' übersetzt, Laufwerksbezeichner werden in Verzeichnisnamen konvertiert, und einige andere Konvertierungen werden ebenfalls durchgeführt. In einigen Fällen ist diese Konvertierung falsch - "c:\Program Files\Java\jdk1.8.0_25"\binin meinem Windows-Pfad wird /c/Program Files/Java/jdk1.8.0_25"/biin den Git-Bash-Pfad konvertiert (es fehlen das erste und das letzte Zeichen). Die Frage ist also, wie geschieht dies?
Jules
@Jules Das ist ja möglich. In 5 Jahren hat sich viel geändert.
Vom
5

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 #################################
anubhav
quelle
Versuchte das in git-bash und es funktionierte ohne die Problemumgehung für .bashrc. Vielen Dank!
Michael Haidl
Schön das zu hören :) Gern geschehen.
Anubhav
2

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.

Tony OHagan
quelle
1

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 die 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 die Umgehung jemand anderem hilft, großartig.

gilly3
quelle