Respuestas:
Puede declarar fcomo una función de solo lectura usando readonly -f fo declare -g -r -f f( readonlyes equivalente a declare -g -r). Es la -fopción de estas utilidades integradas lo que hace que actúen fcomo el nombre de una función, en lugar de sobre la variable 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
Como puede ver, hacer que la función de solo lectura no solo la proteja de ser anulada, sino que también la protege de ser desarmada (eliminada por completo).
Actualmente (a partir de bash-5.0.11), intentar modificar una función de solo lectura no terminaría el shell si se usa la errexitopción de shell ( set -e). Chet, el bashmantenedor, dice que esto es un descuido y que se cambiará con la próxima versión.
bash: f: readonly functiony un código de estado distinto de cero, pero no sale si la errexitopción está habilitada.
bash, pero preguntaré en una de las bashlistas de correo para estar seguro.
bashsolo se cierra cuando set -eestá vigente cuando POSIX lo requiere (y readonly -fno es POSIX). Greg señala que el bashmanual nunca menciona la "falla en la declaración de la función" como razón para errexitdesencadenar una salida (a menos que una declaración de función cuente como un comando compuesto, lo cual está bastante seguro de que no lo hace). El hilo está en curso aquí: lists.gnu.org/archive/html/help-bash/2019-09/msg00039.html
errexito set -een tu pregunta.
typeset -r:typeset -rf f.