Você pode imprimir a definição atual da função e incluí-la em uma definição de função dentro de uma cláusula eval
.
current_definition=$(declare -f command_not_found_handle)
current_definition=${current_definition#*\{}
current_definition=${current_definition%\}}
prefix_to_add=$(cat <<'EOF'
# insert code here (no special quoting required)
EOF
)
suffix_to_add=$(cat <<'EOF'
# insert code here (no special quoting required)
EOF
)
eval "command_not_found_handle () {
$prefix_to_add
$current_definition
$suffix_to_add
}"
Outra abordagem, que eu acho mais clara, é definir a função original com um novo nome e chamar isso da sua definição. Isso só funciona se você não precisa agir sobre as variáveis locais da definição original.
eval "original_$(declare -f command_not_found_handle)"
command_not_found_handle () {
…
original_command_not_found_handle
…
}