Myślę, że to może ci pomóc?
eval $(printf 'ping "%s" & ' host1 host2 host3)
Wykorzystuje on printf
zdolność do „auto-iteracji” swoich argumentów, ponownie wykorzystując ciąg formatu dla każdego argumentu. Dlatego powyższe printf
tworzy sekwencję ping <hostname> &
ciągów znaków dla każdego hosta podaną jako argument i przekazuje taką sekwencję poleceń poprzez zastąpienie eval
polecenia do polecenia, aby je natychmiast wykonać.
printf
a eval
polecenia są standardem POSIX, a także zastępowanie poleceń.
Zawarcie całej takiej komendy w podpowłoce zawierającej i-ed wait
takie 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 ping
polecenie 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ę ping
s do polecenia .
(aka source
) poprzez podstawienie procesu.