Você pode declarar f
como uma função somente leitura usando readonly -f f
ou declare -g -r -f f
( readonly
é equivalente a declare -g -r
). É a -f
opção para esses utilitários internos que os faz agir f
como o nome de uma função, e não na variável 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 você pode ver, tornar a função somente leitura não apenas a impede de ser substituída, mas também a de ser desmarcada (removida completamente).
Atualmente (a partir de bash-5.0.11
), tentar modificar uma função somente leitura não encerraria o shell se alguém estiver usando a errexit
opção shell ( set -e
). Chet, o bash
mantenedor, diz que isso é um descuido e que será alterado no próximo lançamento.
typeset -r
:typeset -rf f
.