ফাংশন রফতানিতে এটি করা উচিত (অরীক্ষিত):
export -f echo_var
seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
আপনি printf
বাইরের পরিবর্তে বিল্টিন ব্যবহার করতে পারেন seq
:
printf "n%04g\n" {1..100} | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
এছাড়াও, ব্যবহার করে return 0
এবং এর exit 0
মতো কোনও ত্রুটি মানকে পূর্ববর্তী কমান্ড দ্বারা উত্পাদিত হতে পারে ks এছাড়াও, যদি কোনও ত্রুটি না থাকে তবে এটি ডিফল্ট এবং এভাবে কিছুটা অপ্রয়োজনীয়।
@ ফবিক উল্লেখ করেছেন যে বাশ কমান্ডটি সরল করা যেতে পারে
bash -c 'echo_var "{}"'
এটি {}
সরাসরি ভিতরে সরানো । কিন্তু এটা কমান্ড ইনজেকশন প্রবন হিসাবে @Sasha দ্বারা নির্দিষ্ট।
আপনি এম্বেড থাকা বিন্যাসটি ব্যবহার করবেন না কেন তা এখানে একটি উদাহরণ :
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "{}"'
Sun Aug 18 11:56:45 CDT 2019
কেন না এর আরেকটি উদাহরণ :
echo '\"; date\"' | xargs -I {} bash -c 'echo_var "{}"'
এটিই নিরাপদ বিন্যাসটি ব্যবহার করে আউটপুট হয় :
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "$@"' _ {}
$(date)
এটি ইনজেকশন এড়ানোর জন্য প্যারামিটারাইজড এসকিউএল কোয়েরিগুলি ব্যবহার করে তুলনীয় ।
আমি সাশার মন্তব্যে ব্যবহৃত কমান্ডের date
পরিবর্তে কমান্ডের বিকল্পে বা পালানো উদ্ধৃতিগুলিতে rm
ব্যবহার করছি কারণ এটি অ-ধ্বংসাত্মক।