आप उपयोग कर सकते हैं ।exec ./your-script
गनोम टर्मिनल जैसा एक टर्मिनल एमुलेटर क्विट करता है जब इसके अंदर चल रही प्रारंभिक प्रक्रिया - जो आमतौर पर एक शेल - क्विट होती है।
यदि आप पहले से ही एक टर्मिनल में हैं और केवल एक चीज जिसे आप छोड़ने से पहले करना चाहते हैं, वह यह है कि टर्मिनल किसी विशेष स्क्रिप्ट (या प्रोग्राम) को चलाने के लिए है, तो इसका मतलब है कि आपको अब उस शेल की आवश्यकता नहीं है जो अब उसमें चल रहा है। इस प्रकार आप शेल के exec
बिलिन का उपयोग कर सकते हैं ताकि शेल आपके आदेश द्वारा बनाई गई प्रक्रिया से खुद को प्रतिस्थापित कर सके।
- आपकी स्क्रिप्ट के मामले में, यह एक और शेल प्रक्रिया है - ठीक उसी तरह जैसे कि जब आप बिना स्क्रिप्ट चलाते हैं तो दूसरी शेल प्रक्रिया कैसे बनाई जाती है
exec
।
वाक्य-विन्यास है , जैसे ,।exec command
exec ./your-script
exec
: एक उदाहरण
उदाहरण के लिए, मान लें कि मेरे पास एक शेल स्क्रिप्ट है count
, जिसे निष्पादन योग्य चिह्नित किया गया है, और वर्तमान निर्देशिका में स्थित है। इसमें शामिल है:
#!/usr/bin/env bash
for i in {5..1}; do echo $i; sleep 1; done
और, एक टर्मिनल में, मैं चलाता हूं:
exec ./count
यह प्रिंट अंकों के 5
, 4
, 3
, 2
, और 1
प्रति सेकंड, एक, और फिर टर्मिनल विंडो बंद करता है।
यदि आप अपने टर्मिनल में चलने वाली पहली प्रक्रिया के अलावा किसी अन्य चीज़ से इसे चलाते हैं - उदाहरण के लिए, यदि आप bash
पहली बार किसी अन्य शेल आवृत्ति को प्रारंभ करने के लिए दौड़े - तो यह आपको टर्मिनल को छोड़ने के बजाय उस प्रक्रिया को बनाने वाले शेल में वापस लाता है । (यह चेतावनी समान exit
तरीकों पर लागू होती है ।)
आप उपयोग कर सकते हैं ।./your-script; exit
यदि आप अपने शेल को खुद को नई प्रक्रिया (के माध्यम से exec
) से बदलने के लिए नहीं कहना चाहते हैं , तो आप इसे चारों ओर चिपकाने के लिए कह सकते हैं लेकिन नई प्रक्रिया समाप्त होने के तुरंत बाद खुद को छोड़ सकते हैं।
ऐसा करने के लिए, अपनी कमांड और कमांड को चलाएं exit
, ;
जिससे अलग होकर उन्हें एक लाइन पर दिया जा सके।
वाक्य-विन्यास है command; exit
, जैसे ,।./your-script; exit
command; exit
बनाम command && exit
आप यह देख सकते हैं कि कोस और हेमायल के उत्तरों में सुझाई गई विधि के समान है। अंतर यह है कि:./your-script && exit
&&
दूसरी कमांड को केवल तभी चलाता है जब पहले कमांड ने रिपोर्ट किया था कि यह शून्य का निकास कोड वापस करके सफल हुआ ।
;
सफलता की सूचना दी या नहीं, भले ही दूसरी कमान चलाता हो।
आप जो चाहते हैं वह विशिष्ट स्थिति पर निर्भर करता है। यदि कमांड विफल रहता है, तो क्या आप चाहते हैं कि कॉलिंग शेल (और होस्टिंग टर्मिनल) ऊपर रहे? यदि हां, तो उपयोग करें &&
; यदि नहीं, तो उपयोग करें ;
।
वहाँ भी है command || exit
, जो विफलताcommand
की सूचना देने पर ही कॉलिंग शेल को छोड़ देता है ।