Para executar comandos simultaneamente, você pode usar o &
separador de comandos.
~$ command1 & command2 & command3
Isso iniciará command1
e depois o executará em segundo plano. O mesmo com command2
. Então começa command3
normalmente.
A saída de todos os comandos será ilegível, mas se isso não for um problema para você, essa seria a solução.
Se você quiser ter uma visão separada da saída posteriormente, poderá canalizar a saída de cada comando 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ê pode 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, obtemos:
~$ 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 consigo pensar agora.
Se você deseja interromper todos eles de uma vez, pode usar a compilação trap
.
~$ trap 'kill %1; kill %2' SIGINT
~$ command1 & command2 & command3
Isto irá executar command1
e command2
no fundo e command3
em primeiro plano, o que permite que você matá-lo com Ctrl+ C.
Quando você mata o último processo com Ctrl+, Cos kill %1; kill %2
comandos são executados, porque conectamos a execução deles com a recepção de um INTerupt SIGnal, a coisa enviada pressionando Ctrl+ C.
Eles matam, respectivamente, o 1º e o 2º processo em segundo plano (seu command1
e command2
). Não se esqueça de remover a armadilha depois que você terminar de usar seus comandos trap - SIGINT
.
Monstro completo 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 . Permite dividir seu console em quantos consoles separados você desejar. Portanto, você pode monitorar todos os comandos separadamente, mas ao mesmo tempo.