Em uma definição de função foo () { … }
, se foo
for um alias, ele será expandido. Isso às vezes pode ser um problema, mas aqui ajuda. Alias foo
para algum outro nome antes de fazer o sourcing do arquivo, e você estará definindo uma função diferente. No bash, a expansão de alias é desativada por padrão em shells não interativos, portanto, é necessário ativá-lo com shopt -s expand_aliases
.
Se sourced.sh
contiver
foo () {
echo "foo from sourced.sh"
}
então você usa dessa maneira
foo () {
echo "old foo"
}
shopt -s expand_aliases # necessary in bash; just skip in ash/ksh/zsh
alias foo=do_not_define_foo
. sourced.sh
unalias foo; unset -f do_not_define_foo
foo
você recebe old foo
. Observe que o arquivo originado deve usar a sintaxe da definição da função foo () { … }
, não function foo { … }
, porque a palavra-chave function
bloquearia a expansão do alias.