Réponses:
Écrivez simplement {}
deux fois dans votre commande. Les éléments suivants fonctionneraient:
$ echo test | xargs -I {} echo {} {}
test test
Votre problème est de savoir comment les commandes sont imbriquées . Regardons ceci:
echo test | xargs -I {} echo {} && echo {}
bash s'exécutera echo test | xargs -I {} echo {}
. S'il s'exécute correctement, echo {}
est exécuté. Pour modifier l'imbrication, vous pouvez faire quelque chose comme ceci:
echo test | xargs -I {} sh -c "echo {} && echo {}"
Cependant, vous pourriez avoir des problèmes car l'approche pourrait être sujette à l'injection de code. Lorsque "test" est remplacé par du code shell, il est exécuté. Par conséquent, vous devez probablement transmettre l'entrée au shell imbriqué avec des arguments.
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
$(rm -f *)
. Il vaut mieux fairexargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Une autre option consiste à utiliser -i
flag, qui est le même que -I{}
(cela implique que le remplacement est donné avec {}
):
$ echo test | xargs -i echo {} {}
This option is deprecated; use -I instead.
a été ajouté au manuel man xargs
.
Pour moi, seul le minuscule fonctionne. J'avais des centaines d'images dans un répertoire et je voulais les mettre dans une liste. L' -I
option majuscule i ne fonctionnait pas pour moi. Uniquement les minuscules. Probablement en raison de différences de version. Ces images avaient toutes des noms comme Daniel_(somenumber).jpg
.
Cette syntaxe a fonctionné:
ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"
Retour:
src='Daniel_248.jpg' alt='Daniel_248.jpg'
...
Linux ver 4.14.96-hw + # 80 SMP x86_64 GNU / Linux
var=test & echo $var ...