Sto cercando di usare xargs per eseguire un comando per ogni argomento fornito, ma sfortunatamente il flag --replace / -I non sembra funzionare correttamente quando coniugato con -n. Sembra che {} si espanderà nell'elenco completo degli argomenti letti da stdin, indipendentemente dall'opzione -n.
Sfortunatamente tutti gli esempi sul web sembrano essere per comandi (mv, cp, rm) che prenderanno più argomenti in cui {} viene espanso.
Ad esempio, quando si esegue:
echo a b c d | xargs -n 1 -I {} echo derp {}
L'output è:
derp a b c d
Ma mi aspettavo:
derp a
derp b
derp c
derp d
Tuttavia, eseguendolo senza -I {} si ottiene il risultato previsto:
echo a b c d | xargs -n 1 echo derp
derp a
derp b
derp c
derp d
C'è un modo per raggiungere questo obiettivo con xargs? La mia ultima intenzione è quella di usarlo per eseguire più sessioni ssh (parralel), come
echo server{1..90} | xargs -n 1 -P 0 -I {} ssh {} 'echo $SOME_HOST_INFO'
Sto correndo xargs (GNU findutils) 4.4.2
su 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.
Quindi si comporta come previsto.
xargs
, ma non GNUxargs
.