xargs --replace / -I একক যুক্তির জন্য


10

আমি প্রতিটি প্রদত্ত আর্গুমেন্টের জন্য কমান্ড চালানোর জন্য xargs ব্যবহার করার চেষ্টা করছি, তবে দুর্ভাগ্যক্রমে --rep / -I পতাকাটি -n এর সাথে সংযুক্ত হওয়ার সাথে সাথে সঠিকভাবে কাজ করবে বলে মনে হচ্ছে না। দেখে মনে হচ্ছে {st স্ট্যান্ডিন থেকে পঠিত আর্গুমেন্টগুলির সম্পূর্ণ তালিকায় প্রসারিত হবে, -n বিকল্প নির্বিশেষে।

দুর্ভাগ্যক্রমে ওয়েবে সমস্ত উদাহরণ কমান্ড (এমভি, সিপি, আরএম) এর জন্য বলে মনে হচ্ছে যা একাধিক যুক্তি গ্রহণ করবে যেখানে {। প্রসারিত।

উদাহরণস্বরূপ, যখন চলমান:

echo a b c d | xargs -n 1 -I {} echo derp {}

আউটপুটটি হ'ল:

derp a b c d

তবে আমি প্রত্যাশা করেছি:

derp a
derp b
derp c
derp d

তবে, আমি-I {ব্যতীত এটি চালানো প্রত্যাশিত ফলাফল দেয়:

echo a b c d | xargs -n 1 echo derp
derp a
derp b
derp c
derp d

Xargs দিয়ে এটি অর্জন করার কোনও উপায় আছে কি? আমার চূড়ান্ত উদ্দেশ্য এটি একাধিক (parralel) ssh সেশন চালানোর জন্য ব্যবহার করা, যেমন

echo server{1..90} | xargs -n 1 -P 0 -I {} ssh {} 'echo $SOME_HOST_INFO'

আমি xargs (GNU findutils) 4.4.2RHEL 6.3 এ চলছে ।


2
মজার বিষয় হল এটি BSD এর সাথে আপনি যেমন ইচ্ছা তেমন কাজ করে xargsতবে GNU নয় xargs
ছোঁয়া

1
man xargsচালু -I: Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1.সুতরাং এটি নকশা করা হিসাবে আচরণ করে।
ড্যানিয়েল বেক

@ আন্দ্রে, যেহেতু আপনার উদ্দেশ্য সমান্তরালভাবে টাকা চালানো, তাই আপনি কি জিএনইউ সমান্তরাল দিকে একবার নজর দিয়েছেন? এটি কাজটি সুন্দরভাবে করে। দাবি অস্বীকার: আমি এটি ডেবিয়ানের জন্য প্যাকেজ করছি।
rbrito

জিএনইউ সমান্তরালটি একটি ভাল প্রতিস্থাপনের মতো বলে মনে হয়েছিল, তবে দুর্ভাগ্যক্রমে আমি এই নির্দিষ্ট হোস্টে এটি ইনস্টল করতে পারছি না।
আন্দ্রে ফার্নান্দেস

@ অ্যান্ড্রে ফার্নান্দেস oletange.blogspot.dk/2013/04/why-not-install-gnu-parallel.html- এর আওতাভুক্ত না হলে আপনি কী বিশদটি বর্ণনা করতে পারেন
ওলে

উত্তর:


5

আপনার প্রত্যাশিত ফলাফলটি অর্জন করতে আপনি নিউলাইনগুলির সাথে প্রতিধ্বনি করতে পারেন। আপনার ক্ষেত্রে সার্ভার সম্প্রসারণের ক্ষেত্রে এটি হবে:

$ echo -e server{1..4}"\n" | xargs -I{} echo derp {}
derp server1
derp server2
derp server3
derp server4

নিউলাইন ধারণাটি সমস্যাটি ঘিরে কাজ করে (কেবল আপনার সঠিক উদাহরণের সাথে নয়): ইকো সার্ভার {1..4} | ত্র '' '\ n' | xargs -I {} ইকো ডের্প} p ডের্প সার্ভার 1 ডার্প সার্ভার 2 ডেরাপ সার্ভার 3 ডার্প সার্ভার 4
আন্দ্রে ফার্নান্দেস

দুঃখিত, এটি দিয়ে পরীক্ষিত zsh... আমার উত্তর স্থির। echoপ্রয়োজন -eবিকল্প।
আহিলসেন্ড

2

আপনি এটির মতো অতিরিক্ত পাইপ ব্যবহার করতে পারেন,

echo a b c d | xargs -n1 | xargs -I{} echo derp {}
derp a
derp b
derp c
derp d

'-N1' বিকল্পের কারণে xargs 'প্রতিধ্বনি' প্রতিটি অক্ষর পৃথকভাবে 'abcd' এর মধ্যবর্তী ব্যবহার। এটি প্রতিটি অক্ষরকে তার নিজস্ব লাইনে রাখে,

echo a b c d | xargs -n1
a
b
c
d 

এক্স-স্ট্রিং রিপ্লেসমেন্ট) ব্যবহার করার সময় এটি বুঝতে গুরুত্বপূর্ণ, xargs -L বোঝায়, যা ইউটিলিটি কমান্ডটি কার্যকর করে (আপনার ক্ষেত্রে প্রতিধ্বনিত হয়) প্রতি লাইনে একবার once এছাড়াও, আপনি -L এর সাথে পারস্পরিক একচেটিয়া হওয়ায় ব্যবহার করতে পারবেন না।

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