Risposte:
Immagino che ti aspetti &&
di lavorare in questo modo:
ssh-agent /bin/bash
stato digitatossh-add ~/.ssh/bitbucket_rsa
stato digitatoMa non è così che funziona. Gli alias non sono "input tastiera falsi" e &&
non sono "chiavi invio false". La shell li interpreta direttamente come comandi . Quindi funziona davvero così:
ssh-agent /bin/bash
ssh-add ~/.ssh/bitbucket_rsa
Pertanto, l'alias non "annulla" al passaggio 1.
Esso ha effettivamente iniziare una nuova copia di / bin / bash, e ora avete in esecuzione bash all'interno bash - hanno appena sembrano identici gli uni agli altri, in modo da non ha notarlo. Ma dai un'occhiata più da vicino ps xf
e vedrai:
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
Quindi invece l'alias è in attesa del completamento del passaggio 1 .
Se hai digitato in exit
questo momento, la seconda bash verrebbe chiusa (insieme a ssh-agent) e il tuo alias continuerebbe da quel punto e tutti i restanti comandi verrebbero interpretati nella shell bash originale .
Invece, probabilmente vuoi questo:
alias push-bb="ssh-agent /bin/bash -c 'ssh-add ~/.ssh/bitbucker_rsa && git push'"
Qui, invece di attendere l'input da tastiera, al "nuovo" bash viene detto direttamente di eseguire i restanti due comandi.
&&
non equivale semplicemente a "Attendi che esca il comando precedente" - lo fa uno standard;
.&&
attenderà l'uscita del comando precedente e quindi eseguirà il secondo comando solo se il primo comando ha restituito un valore di '0'