Ich benutze MsysGit unter Windows 7. Ich habe ein nerviges Problem. Die gesamte Datei bash_profile scheint zweimal ausgeführt zu werden. Zum Beispiel habe ich die folgende Echozeile im .bash_profile
echo "Boinkk..."
Wenn ich habe
echo "Calvin..."
echo "Hobbes..."
Dann bekomme ich Also weiß ich, dass die .bash_profile-Datei zweimal ausgeführt wird und nicht jede Anweisung zweimal ausgeführt wird. Das Ziel für die ausführbare Datei "Git Bash" ist
C:\Windows\System32\cmd.exe /c ""C:\Program Files\Software\Git\bin\sh.exe" --login -i"
Weiß jemand, was ich tun muss, damit die Bash-Shell die bash_profile-Anweisungen nur einmal ausführt?
-i
von Ihrem Ziel zu entfernen .-i
, hat nicht geholfen. Ich habe auch versucht, zu entfernen--login -i
, aber dann wurde .bash_profile überhaupt nicht bezogenAntworten:
Ich bin nicht mit dem Reparieren unter Windows vertraut, aber wenn es UNIX / Linux wäre, könnten Sie Folgendes tun:
und sehen Sie, woher Sie Ihren doppelten Eintrag erhalten. Ich spekuliere, dass Ihr .bash_profile mehr als einmal zum Pfad hinzugefügt wird. Wenn Sie herausfinden, wo der Pfad bearbeitet wird, können Sie Ihr Problem beheben.
quelle
echo $PATH <br />
,echo "$0"
,echo "$BASH_SOURCE"
um zu versuchen , was zu finden war Sourcing Bash_profile zweimal, aber kein Glück. Ich habe keine .bashrc-Dateien. Es scheint mir, dass Git Bash beim Start zweimal ~ / .bash_profile bezieht.Ich hatte das gleiche Problem und bemerkte, dass es keine ~ / .bashrc-Datei gab.
Das Erstellen eines leeren ~ / .bashrc hat das Problem behoben:
Ich konnte nur spekulieren, warum dies funktionierte, aber es tat es.
quelle
TL; DR - Versuchen Sie,
--login
aus Ihrem Bash-Aufruf zu entfernenWenn Sie Git für Windows mit ConEmu oder Cmder verwenden, sieht der Befehl zum Starten von bash wahrscheinlich folgendermaßen aus:
Beachten Sie das
--login
Bit. Offenbar , wenn--login
zu bash übergeben wird, wird es zuerst die Befehle ausführen/etc/profile
, dann ausführen eines~/.bash_profile
,~/.bash_login
oder~/.profile
- je nachdem , was vorhanden ist .Jetzt stellt msys eine zur Verfügung
/etc/profile
, die alle Skripte unter ausführt/etc/profile.d
. Cmder bietet an/etc/profile.d/cmder.sh
, was ausgeführt wird~/.bashrc
(Auszug unten)Das ist alles innerhalb der Ausführung von getan
/etc/profile
. Danachbash --login
wird versucht, auszuführen~/.bash_profile
. Git für Windows generiert Folgendes~/.bash_profile
:Wird bei der Ausführung
~/.bashrc
ein zweites Mal ausgeführt.Lösung? Aus dem Aufruf von bash entfernen
--login
. In Cmder / ConEmu können Sie dies tun, indem Sie auf den Abwärtspfeil neben der Plus-Schaltfläche klicken, Ihre Bash in der Liste suchen und den Befehl in Folgendes ändern:Ohne das
--login
Bit überspringt bash die Ausführung/etc/profile
und führt nur aus~/.bashrc
(... und/etc/bash.bashrc
, aber msys führt das~/.bashrc
dort nicht aus)quelle