exec आदेश निर्दिष्ट कमांड के साथ वर्तमान खोल प्रक्रिया बदल देता है। आम तौर पर, जब आप कमांड चलाते हैं तो एक नई प्रक्रिया शुरू होती है। exec आदेश एक नई प्रक्रिया अंडे नहीं है। इसके बजाय, नई कमांड के साथ वर्तमान प्रक्रिया खत्म हो गई है। दूसरे शब्दों में execएक नई प्रक्रिया बनाए बिना वर्तमान शेल के स्थान पर कमांड को निष्पादित किया जाता है।
निष्पादन कमांड के तीन सबसे आम उपयोग हैं:
1. प्रक्रिया का प्रतिस्थापन
उदाहरण -1:
यदि आप एक नयाbashखोलखोलते हैं
$ bash
में pstreeयह कैसा दिखता
├─gnome टर्मिनल
├─bash───bash───pstree
पिछला bashशेल अभी भी है और आपको एक नया bashशेल मिला है । जबकि यदि आप एक नया बैश खोल के रूप में,
$ exec bash
pstreeशो
├─gnome टर्मिनल
├─bash───pstree
यहां पुराने bashको नए के साथ बदल दिया गया है। यह एक कमांड में कई लॉगिन से बाहर निकलने के लिए विशेष रूप से उपयोगी है। यह अधिक सुरक्षित है और गलती से एक खुला टर्मिनल छोड़ने का मौका मिटा देता है। रूट और उपयोगकर्ता दोनों से एक आदेश के साथ बाहर निकलें देखें
उदाहरण -2: आप एक फ़ाइल खोल सकते हैं
$ exec vi filename.txt
जब आप बाहर निकलते हैं viतो टर्मिनल को अलग से बंद करने की आवश्यकता नहीं होती है क्योंकि शेल पहले से ही बदल दिया जाता है। जैसे ही आप vi बंद करते हैं टर्मिनल भी बंद हो जाता है।
2. शेल स्क्रिप्ट के भीतर फ़ाइल डिस्क्रिप्टर के पुनर्निर्देशन की एक विधि
exec आदेश भी गतिशील रूप से खुला शेल स्क्रिप्ट में इस्तेमाल किया जा सकता है, करीब है, और फ़ाइल वर्णनकर्ता कॉपी। जो कमांड इनवेशन स्ट्रिंग के बजाय शेल स्क्रिप्ट के अंदर विभिन्न फाइलों में STDIN, STDERR, STDOUT और अन्य फाइल डिस्क्रिप्टर का पुनर्निर्देशन करने की अनुमति देता है। यदि आप कोई आदेश या तर्क निर्दिष्ट नहीं करते हैं, तो आप इन कार्यों को करने के लिए पुनर्निर्देशन प्रतीकों और फ़ाइल विवरणकों को निर्दिष्ट कर सकते हैं।
कहते हैं कि आपके पास एक शेल स्क्रिप्ट है script.shजिसे आप एक लॉग फ़ाइल के लिए चाहते हैं script.log, आप इसका उपयोग कर सकते हैं exec,
LOG=/path/to/script.log
exec 1>>$LOG
exec 2>&1
जो के बराबर है
./script &>> /path/to/script.log
./script >> /path/to/script.log 2>&1
3. निष्पादित कमांड का उपयोग करके प्रक्रिया के चरणों का निर्माण
आप शेल स्क्रिप्ट का एक सेट बनाने के लिए निष्पादन कमांड का उपयोग भी कर सकते हैं जो प्रक्रिया के चरणों की तरह क्रमिक रूप से एक दूसरे को निष्पादित करते हैं। हर बार नई प्रक्रियाओं को पैदा करने के बजाय, आपको नियंत्रण को अगली स्क्रिप्ट पर स्थानांतरित करने की आवश्यकता होती है जिसे आप निष्पादित कमांड निष्पादित करते हैं।
इस स्थिति में प्रत्येक चरण का अंतिम कथन execकमांड होना चाहिए जो अगले चरण को लागू करता है।
अधिक के लिए शेल स्क्रिप्ट में कमांड का उपयोगexec देखें ।
नोट: ऊपर का भाग इसी से लिया गया है ।