Estoy tratando de usar xargs para ejecutar un comando para cada argumento proporcionado, pero desafortunadamente el indicador --replace / -I no parece funcionar correctamente cuando se conjuga con -n. Parece que {} se expandirá en la lista completa de argumentos leídos de stdin, independientemente de la opción -n.
Desafortunadamente, todos los ejemplos en la web parecen ser para comandos (mv, cp, rm) que tomarán múltiples argumentos donde se expande {}.
Por ejemplo, cuando se ejecuta:
echo a b c d | xargs -n 1 -I {} echo derp {}
El resultado es:
derp a b c d
Pero yo esperaba:
derp a
derp b
derp c
derp d
Sin embargo, ejecutarlo sin -I {} produce el resultado esperado:
echo a b c d | xargs -n 1 echo derp
derp a
derp b
derp c
derp d
¿Hay alguna manera de lograr esto con xargs? Mi intención última es usarlo para ejecutar múltiples sesiones ssh (paralelas), como
echo server{1..90} | xargs -n 1 -P 0 -I {} ssh {} 'echo $SOME_HOST_INFO'
Estoy corriendo xargs (GNU findutils) 4.4.2
en 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.
entonces se comporta como está diseñado.
xargs
, pero no con GNUxargs
.