Comando Bash para executar um conjunto de comandos em segundo plano

Comando Bash para executar um conjunto de comandos em segundo plano

Eu tenho 2 comandos que bloqueiam a entrada no console, então eles devem ser finalizados com CTRL+C. Não gosto de executá-los em segundo plano, pois perdi o controle da interrupção. Mas, caso contrário, não posso executá-los sequencialmente em uma linha, pois o primeiro comando aguarda o término antes do próximo início.

Deve haver um truque para isso no Unix. O que eu tento é algo como:

$ fg-wrapper infinite-cmd1 & infinite-cmd2
  Executing cmd1 in bg
  Executing cmd2 in bg
(Waiting for CTRL+C to end both)

Estou procurando um oneliner, não um script: fg-wrapper é o comando posix integrado que eu sonharia fornecer como exemplo (eu gostaria de não ter que fazer um script)

Responder1

Experimente isto:

#!/usr/bin/env bash

echo "Executing $1 in bg"
eval $1 &
echo "Executing $2 in bg"
eval $2 &
wait

Explicação:

$1e $2consulte o primeiro e o segundo argumento na linha de comando. evalexecuta esses comandos &executando-os em segundo plano. Por fim, waitespera que esses comandos terminem ou eles podem ser finalizados com CTRL-C.

Experimente este script com ./script "ping google.com > /dev/null" "ping 127.0.0.1 > /dev/null"

informação relacionada