Estou tentando usar o xargs para executar um comando para cada argumento fornecido, mas infelizmente o sinalizador --replace / -I não parece funcionar corretamente quando conjugado com -n. Parece que {} se expandirá para a lista completa de argumentos lidos pelo stdin, independentemente da opção -n.
Infelizmente, todos os exemplos na Web parecem ser para comandos (mv, cp, rm) que receberão vários argumentos onde {} é expandido.
Por exemplo, ao executar:
echo a b c d | xargs -n 1 -I {} echo derp {}
A saída é:
derp a b c d
Mas eu esperava:
derp a
derp b
derp c
derp d
No entanto, executá-lo sem -I {} gera o resultado esperado:
echo a b c d | xargs -n 1 echo derp
derp a
derp b
derp c
derp d
Existe alguma maneira de conseguir isso com xargs? Minha intenção final é usá-lo para executar várias sessões (parralel) ssh, como
echo server{1..90} | xargs -n 1 -P 0 -I {} ssh {} 'echo $SOME_HOST_INFO'
Estou executando xargs (GNU findutils) 4.4.2
no 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.
Por isso, comporta-se como projetado.
xargs
, mas não o GNUxargs
.