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 -i
sinalizador, 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 -I
opçã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 ...