Suponho que isso possa fazer por você?
eval $(printf 'ping "%s" & ' host1 host2 host3)
Ele tira proveito da printfcapacidade de "iterar automaticamente" seus argumentos enquanto reutiliza sua cadeia de caracteres de formato sobre cada argumento. O printfitem acima, portanto, produz uma sequência de seqüências de ping <hostname> &caracteres para cada host fornecido como argumento e alimenta essa sequência de comandos por meio da Substituição de Comando no evalcomando para executá-los imediatamente.
printfe evalcomandos são padrão POSIX, bem como substituição de comandos.
Incluindo todo esse comando em um subshell compreendendo um e-ed waitcomo este:
(eval $(printf 'ping "%s" & ' host1 host2 host3) && wait)
fornece a capacidade de interromper tudo à vontade com um simples Ctrl+C.
Caso contrário, você pode controlar cada pingcomando individualmente através do controle de trabalho usual do shell.
Se o seu shell também oferece suporte para Substituições de Processo, você também pode usar o seguinte:
. <(printf 'ping "%s" & ' host1 host2 host3)
por alguns caracteres a menos para digitar.
A essência é a mesma que para o eval, mas alimenta a sequência de pings para o comando .(aka source) através da Substituição de Processo.