এক্সারেজে কীভাবে দু'বার পরিবর্তনশীল পুনরাবৃত্তি করা যায়


21

এই উদাহরণটিতে পরীক্ষার প্রতিধ্বনির জন্য আমি কীভাবে দ্বিতীয় প্রতিধ্বনি করতে পারি:

 echo test  | xargs -I {} echo {} && echo {}
xargs 

var=test & echo $var ...
অ্যালেক্সাস

xargs -I {} var = {} ইকো $ var && ইকো। var যা আপনাকে দেবে: এ জাতীয় ফাইল বা ডিরেক্টরি নেই।

উত্তর:


27

{}আপনার কমান্ডে দু'বার লিখুন । নিম্নলিখিত কাজ করবে:

$ echo test | xargs -I {} echo {} {}
test test

আপনার সমস্যা হ'ল আদেশগুলি কীভাবে বাসা বাঁধে । এটি দেখুন:

echo test | xargs -I {} echo {} && echo {}

বাশ কার্যকর করবে echo test | xargs -I {} echo {}। যদি এটি সফলভাবে চলে, echo {}কার্যকর হয় uted বাসা বদলানোর জন্য, আপনি এরকম কিছু করতে পারেন:

echo test | xargs -I {} sh -c "echo {} && echo {}"

তবে, আপনি সমস্যা পেতে পারেন কারণ কোডটি ইনজেকশন প্রবণতা প্রবণ হতে পারে। যখন "পরীক্ষা" শেল কোড দ্বারা প্রতিস্থাপিত হয়, এটি কার্যকর হয়। অতএব, আপনার সম্ভবত যুক্তি সহ নেস্টেড শেলটিতে ইনপুটটি পাস করা উচিত।

echo test | xargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}

3
নোট করুন যে আপনি আপনার শেষ কোডে অপ্রত্যাশিত ফলাফল পাবেন যদি আপনার কাছে আফাইল কলড, আক্ষরিক $(rm -f *),। এটি করা ভালxargs -I {} sh -c 'echo "$1" && echo "$1"' sh {}
কুসালানন্দ

@ কুসালানন্দ, ধন্যবাদ আমি সমস্যাটি সম্পর্কে সচেতন ছিলাম তবে আমি এই মুহুর্তে কোনও সহজ সমাধানের কথা ভাবতে পারি না। আমি আপনার পরামর্শ উত্তরের একীভূত।
জোজআটএক্সজিএমএম

5

অন্য বিকল্পটি -iপতাকা ব্যবহার করা হয় , যা একইরূপে -I{}(এটি বোঝায় যে প্রতিস্থাপনটি দেওয়া হয়েছে {}):

$ echo test | xargs -i echo {} {}

1
ইতিমধ্যে: This option is deprecated; use -I instead.ম্যানুয়ালটিতে যুক্ত করা হয়েছে man xargs
জোনাথন কোমার

0

আমার জন্য কেবল লোয়ার কেস কাজ করে। আমার একটি ডিরেক্টরিতে কয়েকশো ইমেজ ছিল এবং তাদের উত্সগুলিকে একটি তালিকায় আনতে চেয়েছিলাম। আপার কেস আই -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'
...

লিনাক্স ভার্স 4.14.96-hw + # 80 এসএমপি x86_64 জিএনইউ / লিনাক্স


2
এটিকে আরও পঠনযোগ্য করার জন্য আমি আপনার উত্তরে কিছু ফর্ম্যাটিং যুক্ত করেছি। আমি আশা করি আমি এটি সঠিকভাবে বুঝতে পেরেছি।
ফ্রে-সান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.