জিএনইউ কেন "বাশ-সি" এর সাথে সমান্তরাল কাজ করে না?


উত্তর:


11

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সাধারণত স্বেচ্ছাচারিত ডেটার জন্য ব্যবহার করা যায় না।


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