TL; DR - попробуйте удалить --login из вашего вызова bash
Если вы используете Git для Windows с ConEmu или Cmder, команда для запуска bash, вероятно, выглядит примерно так:
cmd /c ""%ConEmuDir%\..\git-for-windows\bin\bash" -i --login"
Обратите внимание на бит --login . По-видимому, если --login передается bash, он сначала выполняет команды из /etc/profile , затем выполняет одну из ~/.bash_profile , ~/.bash_login или ~/.profile - в зависимости от того, что существует.
Теперь msys предоставляет /etc/profile , который выполняет все сценарии в /etc/profile.d . Cmder предлагает /etc/profile.d/cmder.sh , который выполняет ~/.bashrc (отрывок ниже)
# Source the users .bashrc file if it exists
if [ -f "${HOME}/.bashrc" ] ; then
. "${HOME}/.bashrc"
fi
Это все делается в исполнении /etc/profile . После этого bash --login попытается выполнить ~/.bash_profile . Git для Windows генерирует этот ~/.bash_profile:
# generated by Git for Windows
test -f ~/.profile && . ~/.profile
test -f ~/.bashrc && . ~/.bashrc
После выполнения ~/.bashrc запускается второй раз.
Решение? Удалить --login из вызова bash. В Cmder/ConEmu это можно сделать, нажав стрелку вниз рядом с кнопкой «плюс», найдя bash в списке и изменив команду на:
cmd /c ""%ConEmuDir%\..\git-for-windows\bin\bash" -i"
Без бита --login bash пропустит выполнение /etc/profile и запустит только ~/.bashrc (... и /etc/bash.bashrc , но msys не выполняет там ~/.bashrc )