% echo -e '1\n2' | parallel "bash -c 'echo :\$1' '' {}"
:1
:2
% echo -e '1\n2' | parallel bash -c 'echo :\$1' '' {}
%
আমি দ্বিতীয় লাইনের একই কাজ করবে আশা করি।
% echo -e '1\n2' | parallel "bash -c 'echo :\$1' '' {}"
:1
:2
% echo -e '1\n2' | parallel bash -c 'echo :\$1' '' {}
%
আমি দ্বিতীয় লাইনের একই কাজ করবে আশা করি।
উত্তর:
parallelইতিমধ্যে একটি শেল কমান্ড রান (যা শেল এটা দ্বারা নির্ধারিত হয় parallelহিউরিস্টিক ব্যবহার (উদ্দেশ্য হিসাবে একই শেল ডাকা হচ্ছে parallelচালানো হয়েছিল থেকে )। আপনি সেট করতে পারেন $PARALLEL_SHELLপরিবর্তনশীল শেল ফিক্স)।
এটি আদেশ বা কমান্ডের parallelমতো আপনি পছন্দ করতে চান এমন একটি আদেশ নয়, তবে শেল কমান্ড লাইন (যেমন আপনি কমান্ডটি চাইবেন )।envxargseval
এর মত eval, মধ্যে parallel arg1 arg2, parallelফাঁকা জায়গাগুলি দিয়ে সেই যুক্তিগুলি সুস্পষ্ট করে arg1 arg2দিচ্ছে (সুতরাং এটি হয়ে যায় ) এবং সেই স্ট্রিংটি পাস করা হয়েছে <the-shell> -c।
parallelস্ট্যান্ডিনে পাস হওয়া আর্গুমেন্টগুলির জন্য, parallelসেই নির্দিষ্ট শেলের দ্বারা প্রত্যাশিত বিন্যাসে সেগুলি উদ্ধৃত করুন (একটি কঠিন এবং ত্রুটিযুক্ত প্রবণ টাস্ক যার কারণে আপনি দেখতে পাবেন যে parallelএর চেঞ্জলগের চারপাশে অনেকগুলি বাগ সংশোধন করা হয়েছে ) কিছু এখনও 2017-03-06 হিসাবে ঠিক করা হয়নি)) এবং এটি কমান্ড লাইনে যুক্ত করে।
সুতরাং উদাহরণস্বরূপ, যদি ভিতরে থেকে ফোন করা হয় bash,
echo "foo'bar" | parallel echo foo
সমান্তরাল কল আছে চান bash -cসঙ্গে echo foo foo\'barকমান্ড লাইন হিসাবে। এবং যদি এর rcসাথে (বা সাথে PARALLEL_SHELL=rc) থেকে ডাকা rc -cহয় echo foo foo''''bar।
আপনার:
parallel bash -c 'echo :\$1' '' {}
parallel যে যুক্তি দেয়:
bash -c echo :$1 {}
এবং {}প্রসারিত এবং শেল আপনাকে কল করছি জন্য সঠিক বিন্যাসে উদ্ধৃত parallelথেকে পাসের যে <that-shell> -cযা ডাকব bash -c echoসঙ্গে :$1মধ্যে $0বর্তমান যুক্তি এবং $1।
এটা কিভাবে parallelকাজ করে না । এখানে, আপনি সম্ভবত চাইবেন:
printf '1\n2\n' | PARALLEL_SHELL=bash parallel 'echo :{}'
কী parallelকরে তা দেখতে আপনি এটি strace -fe execve(বা লিনাক্স না হলে আপনার সিস্টেমের সমতুল্য) এর অধীনে চালাতে পারেন ।
এখানে, আপনি যেটা প্রত্যাশা করছেন তার আরও সহজ প্রক্রিয়াজাতকরণের xargsপরিবর্তে আপনি জিএনইউ ব্যবহার করতে পারেন parallel:
printf '1\n2\n' | xargs -rn1 -P4 bash -c 'echo ":$1"' ''
Https://lists.gnu.org/archive/html/bug-parallel/2015-05/msg00005.html এও আলোচনাটি দেখুন
মনে রাখবেন যে bash -c 'echo foo' '' foo, আপনি $0সেই ইনলাইন-স্ক্রিপ্টের জন্য খালি স্ট্রিং তৈরি করছেন । আমি এড়াতে চাই যে $0এটি ত্রুটি বার্তাগুলিতেও ব্যবহৃত হয়। তুলনা করা:
$ bash -c 'echo x > "$1"' '' /
: /: Is a directory
সঙ্গে.
$ bash -c 'echo x > "$1"' bash /
bash: /: Is a directory
এছাড়াও নোট করুন যে ভেরিয়েবলগুলি অব্যক্ত রেখে যাওয়াটির একটি বিশেষ অর্থ রয়েছে bashএবং এটি echoসাধারণত স্বেচ্ছাচারিত ডেটার জন্য ব্যবহার করা যায় না।