Respostas:
Basta escrever {}duas vezes em seu comando. O seguinte funcionaria:
$ echo test | xargs -I {} echo {} {}
test test
Seu problema é como os comandos são aninhados . Vamos olhar para isso:
echo test | xargs -I {} echo {} && echo {}
o bash será executado echo test | xargs -I {} echo {}. Se executado com sucesso, echo {}é executado. Para alterar o aninhamento, você pode fazer algo assim:
echo test | xargs -I {} sh -c "echo {} && echo {}"
No entanto, você pode ter problemas porque a abordagem pode estar propensa a injeção de código. Quando "test" é substituído pelo código do shell, ele é executado. Portanto, você provavelmente deve passar a entrada para o shell aninhado com argumentos.
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
$(rm -f *) ,. É melhor fazerxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Outra opção é usar o -isinalizador, que é o mesmo que -I{}(implica que a substituição é fornecida com {}):
$ echo test | xargs -i echo {} {}
This option is deprecated; use -I instead.foi adicionado ao manual man xargs.
Para mim, apenas as letras minúsculas funcionam. Eu tinha centenas de imagens em um diretório e queria colocá-las em uma lista. A -Iopção i maiúscula não funcionou para mim. Apenas a minúscula. Provavelmente devido a diferenças de versão. Todas essas imagens tinham nomes como Daniel_(somenumber).jpg.
Essa sintaxe funcionou:
ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"
Devoluções:
src='Daniel_248.jpg' alt='Daniel_248.jpg'
...
Linux ver 4.14.96-hw + # 80 SMP x86_64 GNU / Linux
var=test & echo $var ...