Buscando una manera de invocar más de un comando en una línea única de xargs, encontré la recomendación en findutils para invocar el shell de xargs de esta manera:
$ find ... | xargs sh -c 'command $@'
Lo curioso es que si uso xargs así, por alguna razón se salta el primer 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
¿Hay algún problema con mi versión de shell o xargs? ¿Esa documentación es inexacta?
Uso de xargs (GNU findutils) 4.4.2 y GNU bash, versión 4.3.11 (1) -release .
move
al final en el ejemplo! Debería haber leído más detenidamente ... ¡Gracias! =)No lo hace. Bash asigna el primer argumento a $ 0:
$@
se expande a$1
$2
$3
... En consecuencia, el valor de$0
no está incluido en$@
.fuente