.bash_profile declarações são executadas duas vezes

7

Eu uso o MsysGit no windows 7. Eu tenho um problema chato. O arquivo bash_profile inteiro parece ser executado duas vezes. por exemplo, eu tenho a seguinte linha de eco no .bash_profile

echo "Boinkk..."

Seeutiver

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

Então eu obtenho Entãoeuseiqueoarquivo.bash_profileestásendoexecutadoduasvezesenãocadainstruçãosendoexecutadaduasvezes.Oalvodoexecutável"Git Bash" é

C:\Windows\System32\cmd.exe /c ""C:\Program Files\Software\Git\bin\sh.exe" --login -i"

Alguém sabe o que devo fazer para que o shell bash execute as instruções bash_profile apenas uma vez?

    
por Prasanth 29.06.2011 / 05:55

3 respostas

1

Não estou familiarizado com a forma de corrigir no Windows, mas se fosse UNIX / Linux, você poderia fazer:

echo $PATH <br />

e veja de onde você está obtendo sua entrada dupla. Estou especulando que seu .bash_profile está sendo adicionado ao caminho mais de uma vez. Se você rastrear onde o caminho está sendo manipulado, poderá corrigir seu problema.

    
por 03.09.2011 / 07:23
6

Eu tive o mesmo problema e notei que não havia nenhum arquivo ~ / .bashrc.

A criação de um vazio ~ / .bashrc resolveu o problema:

touch ~/.bashrc

Eu só poderia especular por que isso funcionou, mas aconteceu.

    
por 07.02.2015 / 04:26
1

TL; DR - tente remover --login da sua invocação bash

Se você estiver usando o Git for Windows com o ConEmu ou o Cmder, o comando para iniciar o bash provavelmente será parecido com isto:

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

Observe o --login bit. Aparentemente , se --login for passado para o bash, ele executará primeiro os comandos de /etc/profile , então executam um dos ~/.bash_profile , ~/.bash_login ou ~/.profile - o que existir.

Agora, o msys fornece um /etc/profile , que executa todos os scripts em /etc/profile.d . O Cmder oferece /etc/profile.d/cmder.sh , que executa ~/.bashrc (excerto abaixo)

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

Tudo isso é feito dentro da execução de /etc/profile . Depois, bash --login tentará executar ~/.bash_profile . O Git for Windows gera este ~/.bash_profile :

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

Após a execução, ~/.bashrc é executado uma segunda vez.

Solução? Remova --login da invocação do bash . No Cmder / ConEmu, isso pode ser feito pressionando a seta para baixo ao lado do botão mais, encontrando seu bash na lista e alterando o comando para:

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

Sem o --login bit, o bash ignorará a execução de /etc/profile e só executará ~/.bashrc (... e /etc/bash.bashrc , mas o msys não executará o ~/.bashrc )

por 11.07.2018 / 02:58