À la recherche d'un moyen d'invoquer plusieurs commandes dans une ligne unique xargs, j'ai trouvé la recommandation dans findutils pour invoquer le shell à partir de xargs comme ceci:
$ find ... | xargs sh -c 'command $@'
Ce qui est drôle, c'est que si j'utilise des xargs comme ça, pour une raison quelconque, cela saute le premier argument:
$ 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
Quelque chose ne va pas avec ma version shell ou xargs? Cette documentation est-elle inexacte?
Utilisation de xargs (GNU findutils) 4.4.2 et GNU bash, version 4.3.11 (1) -release .
move
à la fin dans l'exemple! J'aurais dû lire plus attentivement ... Merci! =)Ce n'est pas le cas. Bash assigne le premier argument à $ 0:
$@
s'étend à$1
$2
$3
.... Par conséquent, la valeur de$0
n'est pas incluse dans$@
.la source