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.