Procurando uma maneira de chamar mais de um comando em um liner de xargs, encontrei a recomendação no findutils de chamar o shell do xargs assim:
$ find ... | xargs sh -c 'command $@'
O engraçado é que, se eu usar xargs assim, por algum motivo, pula o primeiro argumento:
$ seq 10 | xargs bash -c 'echo $@'
2 3 4 5 6 7 8 9 10
$ seq 10 | xargs -n2 bash -c 'echo $@'
2
4
6
8
10
Há algo de errado com minha versão do shell ou do xargs? Essa documentação é imprecisa?
Usando xargs (GNU findutils) 4.4.2 e GNU bash, versão 4.3.11 (1) - liberação .
move
no final do exemplo! Eu deveria ter lido com mais cuidado ... Obrigado! =)Não faz. Bash atribui o primeiro argumento a $ 0:
$@
expande para$1
$2
$3
.... Consequentemente, o valor de$0
não está incluído no$@
.fonte