Myślę, że to może ci pomóc?
eval $(printf 'ping "%s" & ' host1 host2 host3)
Wykorzystuje on printfzdolność do „auto-iteracji” swoich argumentów, ponownie wykorzystując ciąg formatu dla każdego argumentu. Dlatego powyższe printftworzy sekwencję ping <hostname> &ciągów znaków dla każdego hosta podaną jako argument i przekazuje taką sekwencję poleceń poprzez zastąpienie evalpolecenia do polecenia, aby je natychmiast wykonać.
printfa evalpolecenia są standardem POSIX, a także zastępowanie poleceń.
Zawarcie całej takiej komendy w podpowłoce zawierającej i-ed waittakie jak to:
(eval $(printf 'ping "%s" & ' host1 host2 host3) && wait)
zapewnia możliwość przerwania wszystkiego w prosty sposób Ctrl+C.
W przeciwnym razie możesz kontrolować każde pingpolecenie osobno poprzez zwykłą kontrolę zadań powłoki.
Jeśli twoja powłoka obsługuje także zastępowania procesów, możesz także użyć następujących poleceń:
. <(printf 'ping "%s" & ' host1 host2 host3)
o kilka znaków mniej do wpisania.
Istota jest taka sama jak dla eval, ale przekazuje sekwencję pings do polecenia .(aka source) poprzez podstawienie procesu.