Я намагаюся використовувати xargs для запуску команди для кожного поданого аргументу, але, на жаль, прапор --replace / -I, здається, не працює належним чином, коли поєднується з -n. Здається, що {} розшириться до повного списку аргументів, прочитаних із stdin, незалежно від параметра -n.
На жаль, всі приклади в Інтернеті, здається, є для команд (mv, cp, rm), які приймуть кілька аргументів, де {} розгорнуто.
Наприклад, під час запуску:
echo a b c d | xargs -n 1 -I {} echo derp {}
Вихід:
derp a b c d
Але я очікував:
derp a
derp b
derp c
derp d
Однак запуск без -I {} дає очікуваний результат:
echo a b c d | xargs -n 1 echo derp
derp a
derp b
derp c
derp d
Чи є спосіб досягти цього за допомогою xargs? Моє остаточне намір - використовувати його для запуску декількох (паралельних) сеансів ssh, наприклад
echo server{1..90} | xargs -n 1 -P 0 -I {} ssh {} 'echo $SOME_HOST_INFO'
Я біжу xargs (GNU findutils) 4.4.2
на RHEL 6.3.
man xargs
на -I
: Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1.
Отже, він поводиться так, як задумано.
xargs
, але не GNUxargs
.