यद्यपि पिछले उत्तर यहां सभी पूर्णता की आवश्यकता को पूरा करते हैं, आप कार्य पूरा होते ही अपनी मशीन को बंद कर सकते हैं।
bash
स्क्रिप्ट्स को trap
पेड किया जा सकता है , जिसका अर्थ है कि कुछ संकेतों को इंटरसेप्ट किया जा सकता है और जरूरत पड़ने पर कुछ कार्यों को अंजाम दिया जा सकता है। EXIT
संकेतों में से एक है जो फंस सकता है।
आप कर सकेंगे:
- अपनी स्वचालित शेल स्क्रिप्ट के
trap
लिए सेट करें EXIT
, अपने स्वचालित कार्यों की समाप्ति
trap
अपने लिए सेट करें .bashrc
EXIT
, जब भी आप उस मशीन से लॉग आउट करते हैं, तो उसे बंद कर दें।
विकल्प # 1 आदर्श मामला होगा, बशर्ते आपके कार्यों को तदर्थ निरीक्षण और मैनुअल निर्णय की आवश्यकता न हो।
विकल्प # 2 उन मामलों को कवर करेगा जहां आप बिना बिजली बंद किए टर्मिनल से बाहर निकलना भूल जाएंगे। हालांकि एक चेतावनी है; यदि आपके पास एक ही मशीन के लिए कई टर्मिनल खुले हैं और आप उनमें से किसी एक से बाहर निकलते हैं, तो यह मशीन को समान रूप से बंद कर देगा। (यह उससे बचने के लिए स्क्रिप्ट किया जा सकता है, लेकिन मैं समाधान को जटिल नहीं करूंगा।)
cleanup(){
# Do some tasks before terminating
echo oh la la, cleaning is so nice
echo "See you later, world"
sudo poweroff & # finally shutdown
}
trap cleanup EXIT
यह .bashrc
विकल्प # 2 के लिए हो सकता है, विकल्प # 1 के लिए आपकी स्क्रिप्ट के शीर्ष पर कहीं पर।
poweroff
स्क्रिप्ट के अंत में उपयोग क्यों नहीं ?
मैं set -eo pipefail
अपनी स्क्रिप्ट के शीर्ष पर उपयोग करना पसंद करता हूं। यदि कोई त्रुटि होती है, तो यह चुपचाप विफल नहीं होगा; यह अधिक कमांड निष्पादित करना बंद कर देगा। trap
के EXIT
संकेत मामलों में जहां स्क्रिप्ट त्रुटियों के कारण समय से पहले ही समाप्त हो जाता है को शामिल करना चाहिए।
हालाँकि आपके कार्यों के लिए, इसका मतलब यह भी हो सकता है कि मशीन पूरी होने से पहले ही बंद हो जाएगी।
मेरे पास एक सरल bash
टेम्पलेट है, जिसका उपयोग मैं स्क्रिप्टिंग को डीबग करना आसान बनाता हूं; शायद यह किसी काम का हो। कृपया देखें इस सार ।
at
(एक बार निष्पादन)।