J'essaie d'utiliser xargs pour exécuter une commande pour chaque argument fourni, mais malheureusement, l'indicateur --replace / -I ne semble pas fonctionner correctement lorsqu'il est conjugué à -n. Il semble que {} se développera dans la liste complète des arguments lus depuis stdin, quelle que soit l'option -n.
Malheureusement, tous les exemples sur le Web semblent être pour des commandes (mv, cp, rm) qui prendront plusieurs arguments où {} est développé.
Par exemple, lors de l'exécution:
echo a b c d | xargs -n 1 -I {} echo derp {}
La sortie est:
derp a b c d
Mais je m'attendais à:
derp a
derp b
derp c
derp d
Cependant, l'exécuter sans -I {} donne le résultat attendu:
echo a b c d | xargs -n 1 echo derp
derp a
derp b
derp c
derp d
Existe-t-il un moyen d'y parvenir avec xargs? Mon intention ultime est de l'utiliser pour exécuter plusieurs sessions ssh (parallèles), comme
echo server{1..90} | xargs -n 1 -P 0 -I {} ssh {} 'echo $SOME_HOST_INFO'
Je cours xargs (GNU findutils) 4.4.2
sur RHEL 6.3.
man xargs
sur -I
: Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1.
Donc, il se comporte comme prévu.
xargs
, mais pas GNUxargs
.