In der bash
Schale, können wir eine Funktion definieren , f
mit
f(){ echo Hello; }
und dann erneut deklarieren / überschreiben mit
f(){ echo Bye; }
Ich glaube, es gibt eine Möglichkeit, Funktionen auf diese Weise davor zu schützen, überschrieben zu werden.
bash
bash-functions
kyb
quelle
quelle
typeset -r
:typeset -rf f
.readonly -f f
Antworten:
Sie können
f
mitreadonly -f f
oderdeclare -g -r -f f
(readonly
entsprichtdeclare -g -r
) als schreibgeschützte Funktion deklarieren . Es ist die-f
Option für diese integrierten Dienstprogramme, mit der sief
als Name einer Funktion und nicht als Variable fungierenf
.Wie Sie sehen, schützt das Festlegen des Schreibschutzes die Funktion nicht nur vor dem Überschreiben, sondern auch vor dem Deaktivieren (vollständiges Entfernen).
Derzeit (ab
bash-5.0.11
) würde der Versuch, eine schreibgeschützte Funktion zu ändern, die Shell nicht beenden, wenn dieerrexit
Shell-Option (set -e
) verwendet wird. Chet, derbash
Betreuer, sagt, dass dies ein Versehen ist und dass es mit der nächsten Veröffentlichung geändert wird.quelle
bash: f: readonly function
und einen Statuscode ungleich Null, wird jedoch nicht beendet, wenn dieerrexit
Option aktiviert ist.bash
, aber ich werde auf einer derbash
Mailinglisten nachfragen , um sicherzugehen.bash
nur dann beendetset -e
wird, wenn POSIX dies erfordert (undreadonly -f
nicht POSIX). Greg weist darauf hin, dass dasbash
Handbuch niemals "Fehler in der Funktionsdeklaration" als Grund fürerrexit
das Auslösen eines Exits erwähnt (es sei denn, eine Funktionsdeklaration zählt als zusammengesetzter Befehl, was er ziemlich sicher nicht tut). Der Thread läuft hier: lists.gnu.org/archive/html/help-bash/2019-09/msg00039.htmlerrexit
oderset -e
in Ihrer Frage sagen .