Para obter a definição da função:
type -a function_name
Eu trabalho em um ambiente que tem muita mágica de script de shell legado por aí. Uma coisa pesada da linha de comando são funções bash que são obtidas de algum arquivo incluído em algum arquivo incluído em algum arquivo ... incluído no meu .bash_profile. Existe uma maneira de obter a definição ou ainda melhor a localização da definição dessas funções sem rastreá-las através de 5 níveis de inclusão?
Supondo que você tenha uma função chamada foo, os comandos abaixo obterão a localização da definição da função, isto é, obterá o nome do arquivo no qual a função está definida, bem como o número da linha na qual a função está definida dentro desse arquivo.
# Turn on extended shell debugging
shopt -s extdebug
# Dump the function's name, line number and fully qualified source file
declare -F foo
# Turn off extended shell debugging
shopt -u extdebug
No meu caso, a saída desses comandos é:
foo 32 /source/private/main/developer/cue.pub.sh
Para ver a definição da função (ao contrário de onde ela veio), use:
declare -f <functionname>
bash -x
irá despejar o que o bash está executando quando for iniciado, o que deve permitir que você o rastreie mais facilmente. Não se esqueça de sair da concha recém-aberta.
de outra forma, que acho ainda mais simples ultimamente:
which <functionname>
(isso também mostrará se é um alias ou um script, mas não rastreará a origem de um alias)