जवाबों:
आप fका उपयोग कर readonly -f fया declare -g -r -f f( readonlyके बराबर है declare -g -r) केवल पढ़ने के लिए एक समारोह के रूप में घोषित कर सकते हैं । यह -fइन अंतर्निहित उपयोगिताओं का विकल्प है जो उन्हें fचर के बजाय एक फ़ंक्शन के नाम के रूप में कार्य करता है f।
$ f(){ echo Hello; }
$ readonly -f f
$ f(){ echo Bye; }
bash: f: readonly function
$ unset -f f
bash: unset: f: cannot unset: readonly function
$ f
Hello
जैसा कि आप देख सकते हैं, फ़ंक्शन को पढ़ना-न केवल इसे ओवरराइड होने से बचाता है, बल्कि इसे अनसेट (पूरी तरह से हटाए जाने) से भी बचाता है।
वर्तमान में (के रूप में bash-5.0.11), केवल-पढ़ने के लिए एक फ़ंक्शन को संशोधित करने की कोशिश कर रहा है यदि errexitशेल विकल्प ( set -e) का उपयोग कर रहा है तो शेल को समाप्त नहीं करेगा । चेट, bashमेंटेनर, का कहना है कि यह एक निरीक्षण है और है कि यह अगली फिल्म के साथ बदल जाएगा।
bash: f: readonly functionऔर गैर-शून्य स्थिति कोड का उत्पादन करता है , लेकिन errexitविकल्प सक्षम होने पर बाहर नहीं निकलता है ।
bash, लेकिन मैं bashमेलिंग सूचियों में से एक पर सुनिश्चित करने के लिए कहूंगा।
bashकेवल तभी बाहर निकलता set -eहै जब POSIX के लिए इसकी आवश्यकता होती है (और readonly -fPOSIX नहीं है)। ग्रेग बताते हैं कि bashमैनुअल कभी भी "फंक्शन डिक्लेरेशन में फेल्योर" का जिक्र नहीं करता, क्योंकि errexitएक एग्जिट को ट्रिगर करने का कारण (जब तक कि फंक्शन डिक्लेरेशन कंपाउंड कमांड के रूप में गिना नहीं जाता है, जो उसे पूरा यकीन है कि ऐसा नहीं होता)। : धागा यहाँ चल रही है lists.gnu.org/archive/html/help-bash/2019-09/msg00039.html
errexitया set -eअपने प्रश्न के बारे में कुछ नहीं कहते हैं ।
typeset -r:typeset -rf f।