.bash_profile-Anweisungen werden zweimal ausgeführt

7

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..."

Geben Sie hier die Bildbeschreibung ein

Wenn ich habe

echo "Calvin..."
echo "Hobbes..."

Dann bekomme ich Geben Sie hier die Bildbeschreibung ein 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?

Prasanth
quelle
1
denn wenn jede Aussage zweimal ausgeführt worden wäre, hätte ich Calvin ... Calvin ... Hobbes ... Hobbes ...
Prasanth
Haben Sie andere RC-Dateien wie bashrc, die bash_profile als Quelle verwenden? Ich glaube nicht, dass es etwas anderes tun würde, als zu versuchen, das -ivon Ihrem Ziel zu entfernen .
jw013
@ jw013 Ich habe versucht zu entfernen -i, hat nicht geholfen. Ich habe auch versucht, zu entfernen --login -i, aber dann wurde .bash_profile überhaupt nicht bezogen
wisbucky

Antworten:

1

Ich bin nicht mit dem Reparieren unter Windows vertraut, aber wenn es UNIX / Linux wäre, könnten Sie Folgendes tun:

echo $PATH <br />

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.

C0D3M0NK3Y
quelle
@Prasanth Kannst du uns mitteilen, was das Update war? Ich habe versucht 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.
wisbucky
Git Bash hat bereits mein .bash_profile bezogen. Das war mein problem Ich bin längst zu einem Unix-Setup übergegangen.
Prasanth
Der <br /> Teil hat bei mir nicht funktioniert (ist das PHP?). Angenommen, dieser Befehl wird verwendet, um die Ausgabe abzugrenzen, hätte ich besseres Glück: echo $ PATH | tr: \\ n
Alex Jansen
6

Ich hatte das gleiche Problem und bemerkte, dass es keine ~ / .bashrc-Datei gab.

Das Erstellen eines leeren ~ / .bashrc hat das Problem behoben:

touch ~/.bashrc

Ich konnte nur spekulieren, warum dies funktionierte, aber es tat es.

Eskapisam
quelle
4
Dies funktionierte auch auf mysteriöse Weise bei mir mit Git Bash unter Windows. Vielen Dank!
Jingtao
1

TL; DR - Versuchen Sie, --loginaus Ihrem Bash-Aufruf zu entfernen


Wenn Sie Git für Windows mit ConEmu oder Cmder verwenden, sieht der Befehl zum Starten von bash wahrscheinlich folgendermaßen aus:

cmd /c ""%ConEmuDir%\..\git-for-windows\bin\bash" -i --login"

Beachten Sie das --loginBit. Offenbar , wenn --loginzu bash übergeben wird, wird es zuerst die Befehle ausführen /etc/profile, dann ausführen eines ~/.bash_profile, ~/.bash_loginoder ~/.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)

# Source the users .bashrc file if it exists
if [ -f "${HOME}/.bashrc" ] ; then
    . "${HOME}/.bashrc"
fi

Das ist alles innerhalb der Ausführung von getan /etc/profile. Danach bash --loginwird versucht, auszuführen ~/.bash_profile. Git für Windows generiert Folgendes ~/.bash_profile:

# generated by Git for Windows
test -f ~/.profile && . ~/.profile
test -f ~/.bashrc && . ~/.bashrc

Wird bei der Ausführung ~/.bashrcein 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:

cmd /c ""%ConEmuDir%\..\git-for-windows\bin\bash" -i"

Ohne das --loginBit überspringt bash die Ausführung /etc/profileund führt nur aus ~/.bashrc(... und /etc/bash.bashrc, aber msys führt das ~/.bashrcdort nicht aus)


theY4Kman
quelle