जवाबों:
आप 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 -f
POSIX नहीं है)। ग्रेग बताते हैं कि bash
मैनुअल कभी भी "फंक्शन डिक्लेरेशन में फेल्योर" का जिक्र नहीं करता, क्योंकि errexit
एक एग्जिट को ट्रिगर करने का कारण (जब तक कि फंक्शन डिक्लेरेशन कंपाउंड कमांड के रूप में गिना नहीं जाता है, जो उसे पूरा यकीन है कि ऐसा नहीं होता)। : धागा यहाँ चल रही है lists.gnu.org/archive/html/help-bash/2019-09/msg00039.html
errexit
या set -e
अपने प्रश्न के बारे में कुछ नहीं कहते हैं ।
typeset -r
:typeset -rf f
।