Estou me envolvendo em armadilhas em Bash novamente. Acabei de notar que a armadilha RETURN não dispara para funções.
$ trap 'echo ok' RETURN
$ f () { echo ko; }
$ f
ko
$ . x
ok
$ cat x
$
Como você pode ver, ele sai conforme o esperado para fornecer o arquivo vazio x
.
Bash's man
tem assim:
Se um sigspec for RETURN, o comando arg será executado toda vez que uma função shell ou um script for executado com a extensão . ou builtins de origem termina a execução.
O que estou perdendo então?
Eu tenho GNU bash, versão 4.4.12(1)-release (x86_64-pc-linux-gnu).
Pelo que entendi, há uma exceção ao trecho do documento em minha pergunta. O trecho foi:
A exceção é descrita aqui:
Quanto a
functrace
, pode ser ativado com otypeset
's-t
:Também
set -o functrace
faz o truque.Aqui está uma ilustração.
Quanto a
declare
, é a-t
opção novamente:Também
extdebug
permite o rastreamento de funções, como na resposta de ikkachu .No Bash 4.4., parece funcionar apenas para funções se
extdebug
estiver habilitado, embora eu não consiga ver isso mencionado na documentação.No Bash 4.3, parece não funcionar para funções.