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.