Para executar comandos simultaneamente, você pode usar o separador de comando & .
~$ command1 & command2 & command3
Isso iniciará command1 e, em seguida, será executado em segundo plano. O mesmo com command2 . Então começa command3 normalmente.
A saída de todos os comandos será truncada, mas se isso não for um problema para você, essa seria a solução.
Se você quiser dar uma olhada separada na saída mais tarde, poderá canalizar a saída de cada comando para tee , o que permite especificar um arquivo para espelhar a saída.
~$ command1 | tee 1.log & command2 | tee 2.log & command3 | tee 3.log
A saída provavelmente será muito confusa. Para combater isso, você poderia dar à saída de cada comando um prefixo usando sed .
~$ echo 'Output of command 1' | sed -e 's/^/[Command1] /'
[Command1] Output of command 1
Então, se juntarmos tudo isso, conseguiremos:
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
[Command1] Starting command1
[Command2] Starting command2
[Command1] Finished
[Command3] Starting command3
Esta é uma versão altamente idealizada do que você provavelmente verá. Mas é o melhor que posso pensar agora.
Se você quiser interromper todos eles de uma só vez, use a compilação em trap .
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 & command2 & command3
Isso executará command1 e command2 no fundo e command3 no primeiro plano, o que permite que você o mate com Ctrl + C .
Quando você mata o último processo com Ctrl + C , os comandos kill %1; kill %2 são executados, porque nós conectamos sua execução com a recepção de um INLINE SIGnal, a coisa enviado pressionando Ctrl + C .
Eles matam respectivamente o primeiro e o segundo processo em segundo plano (seu command1 e command2 ). Não se esqueça de remover a armadilha, depois de terminar seus comandos usando trap - SIGINT .
Complete o monstro de um comando:
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 | tee 1.log | sed -e 's/^/[Command1] /' & command2 | tee 2.log | sed -e 's/^/[Command2] /' & command3 | tee 3.log | sed -e 's/^/[Command3] /'
Você poderia, é claro, dar uma olhada na tela . Ele permite que você divida seu console em quantos consoles separados desejar. Então você pode monitorar todos os comandos separadamente, mas ao mesmo tempo.