Dado o arquivo m.sh
:
f() {
echo foo
}
g() {
f | sed -r 's/^|$/:/g' # random work
}
e e.sh
:
. m.sh
old_f="$(type f | sed '3,$!d')"
f() {
echo "$(eval "$old_f")bar"
}
g
existe uma solução melhor do que usar type
e eval
para chamar a função antiga da função de substituição, mantendo o mesmo nome para que as referências em outras funções ainda funcionem?
Ambos m.sh
e e.sh
fazem parte do mesmo projeto, e por isso podemos modificar m.sh
sem preocupação.
Acabou de me ocorrer que eu poderia fazer:
É uma pena que isso exija modificações
m.sh
para adicionar esse clichê, mas pelo menos evita o uso detype
andeval
.Ter que redefinir manualmente
f()
para aumentar o número pode ser evitado definindo-o uma vez com a primeira definição como:usando estas definições:
Dessa forma,
e.sh
pode substituir simplesmente fazendo: