Ich versuche, mit xargs einen Befehl für jedes angegebene Argument auszuführen, aber leider scheint das Flag --replace / -I nicht richtig zu funktionieren, wenn es mit -n konjugiert wird. Es scheint, dass {} unabhängig von der Option -n in die vollständige Liste der von stdin gelesenen Argumente erweitert wird.
Leider scheinen alle Beispiele im Web Befehle zu sein (mv, cp, rm), die mehrere Argumente annehmen, wobei {} erweitert wird.
Zum Beispiel beim Ausführen:
echo a b c d | xargs -n 1 -I {} echo derp {}
Die Ausgabe ist:
derp a b c d
Aber ich habe erwartet:
derp a
derp b
derp c
derp d
Wenn Sie es jedoch ohne -I {} ausführen, erhalten Sie das erwartete Ergebnis:
echo a b c d | xargs -n 1 echo derp
derp a
derp b
derp c
derp d
Gibt es eine Möglichkeit, dies mit xargs zu erreichen? Meine ultimative Absicht ist es, damit mehrere (parralel) ssh-Sitzungen auszuführen, wie z
echo server{1..90} | xargs -n 1 -P 0 -I {} ssh {} 'echo $SOME_HOST_INFO'
Ich laufe xargs (GNU findutils) 4.4.2
auf RHEL 6.3.
man xargs
on -I
: Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1.
Es verhält sich also wie geplant.
xargs
, aber nicht mit GNUxargs
.