Я думаю, це може зробити для вас?
eval $(printf 'ping "%s" & ' host1 host2 host3)
Він використовує printf
можливість "автоматичного повторення" своїх аргументів, використовуючи повторно його рядок формату для кожного аргументу. Отже, вищезазначене printf
створює послідовність ping <hostname> &
рядків для кожного хоста, наданого як аргумент, і подає таку послідовність команд через Command Substitution до eval
команди, щоб негайно їх виконати.
printf
і eval
команди стандарт POSIX, а також командна заміна.
Закриття цілої такої команди в підшарці, що складається з та-ed, wait
як це:
(eval $(printf 'ping "%s" & ' host1 host2 host3) && wait)
забезпечує можливість переривати все за бажанням простим Ctrl+C.
Крім того, ви можете керувати кожною ping
командою поодиноко за допомогою звичайного керування завданнями оболонки.
Якщо у вашій оболонці є підтримка також замінників процесів, ви також можете скористатись такими:
. <(printf 'ping "%s" & ' host1 host2 host3)
на кілька символів менше набрати.
Суть є такою ж, як і для eval
, але подає послідовність ping
s до команди .
(aka source
) через Process Substitution.