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, -i
iş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 -I
seç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 ...