Suponho que você espera que &&
funcione assim:
- finja que
ssh-agent /bin/bash
foi digitado - finja que Enter foi pressionado
- finja que
ssh-add ~/.ssh/bitbucket_rsa
foi digitado - finja que Enter foi pressionado…
Mas não é assim que funciona. Os aliases não são "entrada de teclado falsa" e &&
não é uma "tecla Enter falsa". O shell interpreta-os diretamente como comandos . Então, realmente funciona assim:
- executar
ssh-agent /bin/bash
- espere que saia
- executar
ssh-add ~/.ssh/bitbucket_rsa
- espere que ele saia…
Portanto, o alias não é "cancelado" na etapa 1.
Ele fez realmente iniciar uma nova cópia do / bin / bash, e agora você tem o bash rodando dentro do bash - eles apenas parecem idênticos um ao outro, então você não percebeu. Mas dê uma olhada em ps xf
e você verá:
123 xterm
└ 124 bash waiting for its child (124 ssh-agent) to exit
└ 678 ssh-agent waiting for its child (679 bash) to exit
└ 679 bash waiting for keyboard input
Então, em vez disso, o alias está aguardando a conclusão da etapa 1 .
Se você digitasse exit
agora, então o segundo bash sairia (junto com ssh-agent), e seu alias continuaria a partir desse ponto, e todos os comandos restantes seriam interpretados o shell original do bash.
Em vez disso, você provavelmente quer isso:
alias push-bb="ssh-agent /bin/bash -c 'ssh-add ~/.ssh/bitbucker_rsa && git push'"
Aqui, em vez de esperar pela entrada do teclado, o "novo" bash é diretamente instruído a executar os dois comandos restantes.