Risposte:
Immagino che ti aspetti &&di lavorare in questo modo:
ssh-agent /bin/bashstato digitatossh-add ~/.ssh/bitbucket_rsastato 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/bashssh-add ~/.ssh/bitbucket_rsaPertanto, 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 xfe 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 exitquesto 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'