जवाबों:
बस {}
दो बार अपनी आज्ञा में लिखिए । निम्नलिखित काम करेगा:
$ echo test | xargs -I {} echo {} {}
test test
आपकी समस्या यह है कि कमांड्स नेस्टेड कैसे हैं । इसे देखें:
echo test | xargs -I {} echo {} && echo {}
मारपीट को अंजाम देंगे echo test | xargs -I {} echo {}
। यदि यह सफलतापूर्वक चलता है, echo {}
तो निष्पादित किया जाता है। नेस्टिंग को बदलने के लिए, आप कुछ इस तरह से कर सकते हैं:
echo test | xargs -I {} sh -c "echo {} && echo {}"
हालांकि, आपको परेशानी हो सकती है क्योंकि दृष्टिकोण कोड इंजेक्शन के लिए प्रवण हो सकता है। जब "परीक्षण" को शेल कोड के साथ प्रतिस्थापित किया जाता है, तो इसे निष्पादित किया जाता है। इसलिए, आपको संभवतः नेस्टेड शेल को तर्कों के साथ इनपुट पास करना चाहिए।
echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
$(rm -f *)
। यह करने के लिए बेहतर हैxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
एक अन्य विकल्प -i
ध्वज का उपयोग करना है , जो कि जैसा है -I{}
(इसका अर्थ है कि प्रतिस्थापन के साथ दिया गया है {}
):
$ echo test | xargs -i echo {} {}
This option is deprecated; use -I instead.
मैनुअल में जोड़ा गया है man xargs
।
मेरे लिए केवल निचला मामला काम करता है। मेरे पास एक निर्देशिका में सैकड़ों छवियां थीं और उन्हें एक सूची में स्रोत प्राप्त करना चाहते थे। ऊपरी मामला i -I
विकल्प ने मेरे लिए काम नहीं किया। केवल निचला मामला। शायद संस्करण अंतर के कारण। इन छवियों में सभी के नाम थे Daniel_(somenumber).jpg
।
इस सिंटैक्स ने काम किया है:
ls -l | tr -s ' ' ':'| cut -d: -f9 | xargs -i echo "img src='"{}"'alt='{}'"
यह दिखाता है:
src='Daniel_248.jpg' alt='Daniel_248.jpg'
...
Linux ver 4.14.96-hw + # 80 SMP x86_64 GNU / लिनक्स
var=test & echo $var ...