Yanıtlar:
Sadece {}komutuna iki kez yaz . Aşağıdakiler işe yarar:
$ echo test | xargs -I {} echo {} {}
test test
Sorununuz komutların nasıl iç içe yerleştirildiğidir . Şuna bir bakalım:
echo test | xargs -I {} echo {} && echo {}
bash yürütülür echo test | xargs -I {} echo {}. Başarılı bir şekilde çalışırsa echo {}yürütülür. Yuvalamayı değiştirmek için şöyle bir şey yapabilirsiniz:
echo test | xargs -I {} sh -c "echo {} && echo {}"
Ancak, sorun alabilirsiniz çünkü yaklaşım kod enjeksiyonuna eğilimli olabilir. "Test" kabuk kodu ile değiştirildiğinde, yürütülür. Bu nedenle, girdiyi büyük olasılıkla yuvalanmış kabuğa argümanlarla iletmeniz gerekir.
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
$(rm -f *). Daha iyixargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
Başka bir seçenek de, -iişaretiyle aynıdır -I{}(değiştirmenin verildiği anlamına gelir {}):
$ echo test | xargs -i echo {} {}
This option is deprecated; use -I instead.kılavuza eklendi man xargs.
Benim için sadece küçük harf çalışıyor. Bir dizinde yüzlerce resim vardı ve onları bir listeye almak istedim. Büyük harf i -Iseçeneği benim için çalışmadı. Sadece küçük harf. Muhtemelen sürüm farklılıkları nedeniyle. Bu görüntülerin hepsinin adı vardı Daniel_(somenumber).jpg.
Bu sözdizimi çalıştı:
ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"
İadeler:
src='Daniel_248.jpg' alt='Daniel_248.jpg'
...
Linux ver 4.14.96-hw + # 80 SMP x86_64 GNU / Linux
var=test & echo $var ...