
Há muito tempo procuro as melhores práticas para esse cenário.
Se eu tiver o processo2, isso depende do processo1 em execução antecipadamente. Eu configurei um alias como:
alias both='process1 & process2'
Então, quando o process2 sair, eu gostaria que o process1 também saísse (minha solução atual é voltar ao terminal e kill %%
).
Por exemplo (para conectar-se a um dispositivo iOS do Mac via USB):
alias usbssh='/usr/local/bin/iproxy 2222 22 & ssh -p 2222 root@localhost'
Como faço para continuar iproxy
correndo e matá-lo assim que ssh
sair?
Responder1
Basta acrescentar kill $!
no final:process1 & process2; kill $!
$!
é uma variável (confusamente conhecida como "parâmetro" no Bash) e iráexpandirpara o último PID de fundo em qualquer lugar:
Expande para o ID do processo do trabalho colocado mais recentemente em segundo plano, seja executado como um comando assíncrono ou usando o bg integrado (consulte JOB CONTROL abaixo).
%%
é especial e só se expandirá para o último PID de segundo plano no contexto de comandos integrados do shell como fg
e kill
. Infelizmente, isso não está claro na man
página:
Os símbolos %% e %+ referem-se à noção do shell do trabalho atual, que é o último trabalho interrompido enquanto estava em primeiro plano ou iniciado em segundo plano.
PS: Se você precisar transformar isso em uma string de comando, certifique-se kill $!
de que esteja entre aspas simples para que seja expandido em tempo de execução. Melhor ainda, escreva uma função em vez de um alias para evitar sualimitações.