উত্তর:
&কমান্ডের শেষে ট্রেলিং অপারেটরটি কমান্ডগুলি পটভূমিতে রাখতে ব্যবহৃত হয়। এটি পসিক্স স্ট্যান্ডার্ড দ্বারা নির্দিষ্ট একটি স্ট্যান্ডার্ড সিনট্যাক্স :
অ্যাসিঙ্ক্রোনাস তালিকাগুলি
যদি কমান্ডটি কন্ট্রোল অপারেটর ('&') দ্বারা সমাপ্ত হয়, শেলটি একটি সাব-শেলের মাধ্যমে অ্যাসিঙ্ক্রোনিকভাবে কমান্ডটি কার্যকর করবে। এর অর্থ হ'ল শেলটি পরবর্তী কমান্ডটি কার্যকর করার আগে কমান্ডটি শেষ হওয়ার অপেক্ষা করবে না।
পটভূমিতে কমান্ড চালানোর জন্য বিন্যাসটি হ'ল:
কমান্ড 1 এবং [কমান্ড 2 এবং ...]
কমান্ডের ব্যাকগ্রাউন্ডিংয়ের উদ্দেশ্য হ'ল স্ক্রিপ্টের মূল শেল বা কমান্ডের জন্য ইন্টারেক্টিভ শেল ছাড়াই একটি কমান্ড চালানো, যা অন্য কমান্ডের সম্পাদনকে অবরুদ্ধ করে এবং ব্যবহারকারীকে অপেক্ষা করতে অসুবিধা তৈরি করে। এটি দীর্ঘ-চলমান কমান্ডগুলি শুরু করার জন্য কার্যকর তবে আপনার বর্তমান শেলটিতে কাজ চালিয়ে যাওয়া প্রয়োজন। আপনি অনুমান করতে পারেন, এটির উৎপত্তি সেই সময় থেকেই যেখানে কোনও মাল্টি-ট্যাব টার্মিনাল এমুলেটর ছিল না, তবে টার্মিনালগুলি প্রকৃত শারীরিক হার্ডওয়্যার ছিল যা কম্পিউটারেই সংযুক্ত ছিল।
সংজ্ঞা থেকে আপনি দেখতে পাবেন যে &কমান্ডের তালিকার জন্য কমান্ড টার্মিনেটর হিসাবে কাজ করে, অনেকটা পছন্দ ;করে। আপনার নির্দিষ্ট উদাহরণে pyprogramm >> /dev/null 2>&1 &তালিকায় কেবল একটি কমান্ড রয়েছে।
আরো সাধারণভাবে,
echo Hello ; echo World ;
এবং
echo Hello & echo World &
দ্বারা বন্ধ তালিকার দুটি উদাহরণ ;এবং &অপারেটর। একটি পার্থক্য হ'ল চাকরি নিয়ন্ত্রণ অক্ষম &করা /dev/nullথাকলে সমাপ্ত তালিকার সাথে ইনপুট যুক্ত থাকবে :
যদি জব নিয়ন্ত্রণটি অক্ষম থাকে (সেট, -ম দেখুন), অ্যাসিঙ্ক্রোনাস তালিকার জন্য স্ট্যান্ডার্ড ইনপুট, কোনও সুস্পষ্ট পুনঃনির্দেশ সম্পাদন করার আগে, / dev / নাল হিসাবে একই বৈশিষ্ট্যযুক্ত কোনও ফাইলের জন্য নির্ধারিত বলে বিবেচিত হবে। কাজের নিয়ন্ত্রণ সক্ষম করা থাকলে এটি ঘটবে না। সব ক্ষেত্রে স্ট্যান্ডার্ড ইনপুটের স্পষ্ট পুনঃনির্দেশ এই ক্রিয়াকলাপটিকে ওভাররাইড করে।
অনুক্রমিক তালিকায়, তবে, stdinকোনও স্পষ্টত পুনঃনির্দেশ না থাকলে প্রতিটি কমান্ড এখনও টার্মিনালের সাথে সংযুক্ত থাকে।
এটিও নোট করুন, যে সংজ্ঞাটি আমরা আগে উল্লেখ করেছি, সেখান থেকে &সাবশেলে কমান্ড কার্যকর করে। বিপরীতে, ;সমাপ্ত তালিকা বর্তমান শেলের মধ্যে কার্যকর করা হয়। প্রস্থান স্থিতির মধ্যেও পার্থক্য রয়েছে। মানটির &জন্য বলেছেন:
অ্যাসিক্রোনাস তালিকার প্রস্থান স্থিতি শূন্য হবে।
আপনি ব্যাকগ্রাউন্ডে একাধিক কমান্ড রাখতে চাইলে এটি তাৎপর্যপূর্ণ। আপনি যখন কোনও স্ক্রিপ্ট বা কমান্ড লেখেন তখন আপনাকে এমন কমান্ডগুলি বেছে নিতে হবে যার জন্য আপনি সেগুলি ব্যর্থ হন বা না তা বিবেচনা করে না বা নন-শূন্য (ত্রুটি) প্রস্থান স্থিতি পরিচালনা করার জন্য আপনাকে একটি উপায় খুঁজতে হবে। আপনার নির্দিষ্ট উদাহরণে, pyprogramm >> /dev/null 2>&1 &ব্যাকগ্রাউন্ডে দৌড়ানোর ক্ষেত্রে এটি ব্যর্থ হয়েছে কি না তা নির্দেশ করার কিছু উপায় থাকা উচিত, তবে আপনি বিচার করছেন যে আপনি 2>&1পুনর্নির্দেশ করে ত্রুটি আউটপুটটি লুকিয়ে রেখেছেন এবং আপনি সম্ভবত ধরে নিয়েছেন যে স্ক্রিপ্টটি ব্যর্থ হবে না।
বিপরীতে, ;প্রস্থান স্থিতি হিসাবে সংজ্ঞায়িত করা হয়:
ক্রমিক তালিকার প্রস্থান স্থিতি তালিকার শেষ কমান্ডের প্রস্থান স্থিতি হবে।
আবার, আপনি কীভাবে কমান্ড-লাইনে কমান্ডের ক্রমিক তালিকাটি লিখেছেন এবং তালিকার কয়েকটি কমান্ড ব্যর্থ হলে কীভাবে জিনিসগুলি পরিচালনা করতে চান তাতে এর অন্তর্ভুক্তি রয়েছে।
এটা সত্য যে এই POSIX সংজ্ঞা মানে যে সব বোর্ন মত শেল, অর্থ bash, dashএবং kshএটা সমর্থন করতে হবে।
&পুনর্নির্দেশে &কমান্ড টার্মিনেটর হিসাবে পৃথক । এর অর্থ ফাইল-বর্ণনাকারী অবজেক্টটিকে নকল করা (অনুলিপি করা)। দেখুন আউটপুট পুনঃনির্দেশের ঠিক কী বোঝায়?
ইন bashরয়েছে |&অপারেটর (নল এবং এম্পারসেন্ড মধ্যে কোন স্থান মনে রাখবেন)। বাশ ম্যানুয়াল থেকে :
যদি | & ব্যবহার করা হয়, কমান্ডের স্ট্যান্ডার্ড ত্রুটিটি এর স্ট্যান্ডার্ড আউটপুট ছাড়াও পাইপের মাধ্যমে কমান্ড 2 এর স্ট্যান্ডার্ড ইনপুটটির সাথে সংযুক্ত থাকে; এটি 2> & 1 | এর জন্য সংক্ষিপ্ত মান আউটপুটে মান ত্রুটির এই অন্তর্নিহিত পুনর্নির্দেশ কমান্ড দ্বারা নির্দিষ্ট কোনও পুনর্নির্দেশের পরে সঞ্চালিত হয় is
এর অর্থ ব্যাকগ্রাউন্ডে কমান্ড চালানো। কল করা স্ক্রিপ্ট কল করা কমান্ডটি শেষ না হওয়া পর্যন্ত অবরুদ্ধ করার চেয়ে চালিয়ে যায়।
&আউটপুট আড়াল করার বিষয়ে আপনি যা বলছেন তা সঠিক শোনাচ্ছে না। আপনি যে স্ট্যান্ডার্ডটির উদ্ধৃতি দিচ্ছেন তার অনুচ্ছেদটি ইনপুট নয়, আউটপুট বলে । চাকরি নিয়ন্ত্রণ সক্ষম হওয়া বা না করার মধ্যে পার্থক্যের কারণ হ'ল টিটি থেকে পড়ার চেষ্টা করার একটি পটভূমি প্রক্রিয়া স্থগিত হয়ে যাবে। এই মুহুর্তে আপনাকে যে ইনপুটটির জন্য অপেক্ষা করা হচ্ছে তা প্রদানের জন্য আপনাকে অগ্রভাগে স্থাপন করার জন্য কাজের নিয়ন্ত্রণ ব্যবহার করা দরকার। এগুলি সব কাজ নিয়ন্ত্রণ ছাড়াই করা যায় না এবং এইভাবে যদি চাকরি নিয়ন্ত্রণ অক্ষম থাকে তবে স্টিডিনকে/dev/nullসমান বা তার সমতুল্য পুনঃনির্দেশ করা দরকার ।