En el bashshell, podemos definir una función fcon
f(){ echo Hello; }
y luego redeclararlo / anularlo, sin ningún mensaje de error o advertencia, con
f(){ echo Bye; }
Creo que hay una manera de proteger las funciones de ser anuladas de esta manera.
bash
bash-functions
kyb
fuente
fuente

typeset -r:typeset -rf f.readonly -f fRespuestas:
Puede declarar
fcomo una función de solo lectura usandoreadonly -f fodeclare -g -r -f f(readonlyes equivalente adeclare -g -r). Es la-fopción de estas utilidades integradas lo que hace que actúenfcomo el nombre de una función, en lugar de sobre la variablef.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 laerrexitopción de shell (set -e). Chet, elbashmantenedor, dice que esto es un descuido y que se cambiará con la próxima versión.fuente
bash: f: readonly functiony un código de estado distinto de cero, pero no sale si laerrexitopción está habilitada.bash, pero preguntaré en una de lasbashlistas de correo para estar seguro.bashsolo se cierra cuandoset -eestá vigente cuando POSIX lo requiere (yreadonly -fno es POSIX). Greg señala que elbashmanual nunca menciona la "falla en la declaración de la función" como razón paraerrexitdesencadenar 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.htmlerrexitoset -een tu pregunta.