O Rails tem um ótimo truque para patching em decoradores, chamado cadeia de método de alias . Embora o uso de longo prazo talvez seja desencorajado, é incrível se você precisar apenas inserir algum comportamento rapidamente.
Usando o suporte de introspecção do bash, podemos conseguir o mesmo para as funções do shell:
function decorate {
local base=$1
local feature=$2
local undecorated="${base}_without_${feature}"
local decorated="${base}_with_${feature}"
# Define $undecorated with $base's body
eval "$(echo 'function' $undecorated; declare -f $base | tail -n +2)"
# Define $base with $decorated's body
eval "$(echo 'function' $base; declare -f $decorated | tail -n +2)"
}
Veja como usá-lo:
$ function theirfunc { echo do their thing; }
$ function theirfunc_with_mything {
> echo do my thing
> theirfunc_without_mything
> }
$ decorate theirfunc mything
$ theirfunc
do my thing
do their thing
Postado novamente de SO: http://stackoverflow.com/a/4727925/580412