como fazer alias ssh-add / bin / bash em bashrc?

0

como isso não funciona?

alias push-bb="ssh-agent /bin/bash && ssh-add ~/.ssh/bitbucker_rsa && git push"

Eu suponho que cancela em /bin/bash part?

    
por facebook 20.08.2015 / 17:58

1 resposta

1

Suponho que você espera que && funcione assim:

  1. finja que ssh-agent /bin/bash foi digitado
  2. finja que Enter foi pressionado
  3. finja que ssh-add ~/.ssh/bitbucket_rsa foi digitado
  4. 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:

  1. executar ssh-agent /bin/bash
  2. espere que saia
  3. executar ssh-add ~/.ssh/bitbucket_rsa
  4. 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.

    
por 20.08.2015 / 18:28