Я пытаюсь использовать 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? Мое конечное намерение состоит в том, чтобы использовать его для запуска нескольких (parralel) сессий 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
.