Я полагаю, это может сделать для вас?
eval $(printf 'ping "%s" & ' host1 host2 host3)
Он использует printf
способность «автоматически повторять» свои аргументы, повторно используя строку формата над каждым аргументом. Таким образом, вышеприведенное printf
создает последовательность ping <hostname> &
строк для каждого хоста, представленную в качестве аргумента, и передает такую последовательность команд через подстановку 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
) через замену процесса.