Xargs [বন্ধ] ব্যবহার করার সময় আর্গুমেন্টের পরিবর্তে স্ট্ডিনে পুনর্নির্দেশ করুন


12

এক্সপ্লোরের জন্য, কমান্ডটি ব্যবহার করে

cat foo.txt | xargs -I{} -n 1 -P 1 sh -c "echo {} | echo"

foo.txtদুই লাইন রয়েছে

foo
bar

উপরের কমান্ড কিছুই প্রিন্ট।

উত্তর:


6
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh" 

কৌতূহলোদ্দীপক অংশটি হ'ল xargs অন্তর্ভুক্ত সাবস্কেল অনুরোধ সম্পাদন করে। এখানে sh স্পষ্টভাবে আহ্বান জানানো হয়েছে এবং পাইপ পিতামাতার পরিবাহকের অংশ হয় না


1
ধন্যবাদ, আমি আরও প্রশ্নে উদাহরণ দেওয়ার জন্য আমার প্রশ্ন আপডেট করেছি। তবে আপনার প্রস্তাব মতো এটি কাজ করে না ..
রায়ান

1
স্টিন থেকে প্রতিধ্বনিত ক্যান্ট, তাই এটিতে পাইপিংয়ের কোনও বুদ্ধি নেই। এটি তুলনা করুন: cat foo.bar | wc -lএবংcat foo.bar | xargs -J % -n 1 sh -c "echo % | wc -l"
কনডিবাস

1
আমি মনে করি আপনি এর -Iপরিবর্তে মানে -J; -Jxargs এর কোনও বিকল্প নেই
হিটেকম্পিউটারজেক

এর @Hitechcomputergeek FreeBSD 'র এর সংস্করণ xargsআছে -Jবিকল্পটি সমতূল্য -iLinux- রxargs
Kondybas

@ কনডিবাস আমাকে বলার জন্য ধন্যবাদ; আমি জানতাম না যে দুজনের মধ্যে তফাত আছে। আপনি জিএনইউকে পোসিক্স লোল অনুসরণ না করার জন্য বিশ্বাস করতে পারেন। ( -J-I
পসিক্সে

2

আপনি যদি foo.txt এর সমস্ত লাইন প্রক্রিয়া করতে চান তবে আপনাকে একটি লুপ ব্যবহার করতে হবে। &প্রক্রিয়াটিকে ব্যাকগ্রাউন্ডে রাখতে ব্যবহার করুন

while read line; do
   echo $line | bar.sh &
done < foo.txt

যদি আপনার ইনপুটটিতে স্পেস থাকে তবে অস্থায়ীভাবে অভ্যন্তরীণ ক্ষেত্র বিভাজকটিকে নতুন লাইনে সেট করুন

# save the field separator
OLD_IFS=$IFS

# new field separator, the end of line 
IFS=$'\n'

for line in $(cat foo.txt) ; do
   echo $line | bar.sh &
done

# restore default field separator  
IFS=$OLD_IFS     

না-না, আমিও এটির সাথে আটকে আছি। টিএস ফাইলগুলি পৃথক রেখায় বিভক্ত করতে এবং এগুলি স্বাধীনভাবে স্ক্রিপ্টে ফিড করতে
চায়

1
প্রক্রিয়াটির সমান্তরাল করতে আমার xargs ব্যবহার করা দরকার ..
রায়ান

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