Alias_method_chain do Rails para Bash

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