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
)