Por que o bash.exe é executado duas vezes ao usar --login?

1

Ao executar o cygwin, o atalho que tenho usa o seguinte:

C:\cygwin\bin\bash.exe --login -i

O que não está claro para mim é porque o bash.exe é executado duas vezes. Eu vejo dois processos em execução no gerenciador de tarefas. Se eu colocar uma instrução de eco echo .Bashrc file has been processed na parte inferior do meu arquivo .bashrc , verei que a saída de eco aparece duas vezes na janela do console.

O que é sobre bash.exe --login que faz com que o processo seja executado duas vezes? (esse comportamento é esperado?)

    
por Marcel Wilson 15.09.2017 / 00:39

2 respostas

3

Um bash shell que é um shell de login irá fornecer ~/.bash_profile .

O arquivo ~/.bash_profile no sistema Cygwin de Marcel continha a linha

[[ -z $SSH_AGENT_PID && -z $DISPLAY ]] && exec -l ssh-agent $SHELL -c "bash --login"

Isso iniciará ssh-agent se nenhum agente estiver sendo executado no ambiente shell atual e se não houver nenhuma exibição X11 disponível. O agente SSH iniciará dois novos bash shells, um shell não interativo e um shell de login (o shell de login irá ignorar a linha acima, pois terá $SSH_AGENT_PID set). O agente SSH substitui o shell do qual ele está começando, em virtude de ter sido iniciado com exec .

Os dois processos bash que podem ser vistos são

  1. Aquele iniciado por ssh-agent (isso é $SHELL -c ) e
  2. Aquele iniciado pelo $SHELL -c , invocando bash --login .

Para mim, parece que a linha pode ser simplificada em

[[ -z $SSH_AGENT_PID && -z $DISPLAY ]] && exec -l ssh-agent bash --login

Isso eliminaria o shell extra que o ssh-agent usa apenas para executar bash --login .

    
por 15.09.2017 / 01:04
-1

@Kusalananda apontou que --login aciona .bash_profile para ser chamado. Meu .bash_profile tinha a seguinte linha

[[ -z $SSH_AGENT_PID && -z $DISPLAY ]] && exec -l ssh-agent $SHELL -c "bash --login"

assim, uma segunda festa estava sendo aberta toda vez.

    
por 15.09.2017 / 01:01