Use o comando trap
no bash.
trap [-lp] [[arg] sigspec ...]
If a sigspec is DEBUG, the command arg is executed before every simple command ...
Agora, seu único problema é que o comando trap é executado antes e não depois do comando. Mas você pode referir o comando a ser executado com $BASH_COMMAND
, e você pode fazer com que o comando não seja executado.
extdebug
- If the command run by the DEBUG trap returns a non-zero value, the next command is skipped and not executed.
Portanto, defina um trap DEBUG, se você detectar o comando em que está interessado, execute $BASH_COMMAND
, execute seu próprio comando e faça com que o comando original não seja executado.
Editar
Experimente este exemplo:
#!/bin/bash
function myfunc ()
{
if test "$BASH_COMMAND" = "echo 1"; then
$BASH_COMMAND
echo "runing after 'echo 1'"
return 1
else
return 0
fi
}
shopt -s extdebug
trap "myfunc" DEBUG
echo 1
echo 2
Executando este script:
$ bash test.sh
1
runing after 'echo 1'
2