Encontrando a definição de uma função bash

34

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?

    
por pythonic metaphor 24.05.2010 / 20:42

5 respostas

33

Para obter a definição da função:

type -a function_name
    
por 24.05.2010 / 20:55
58

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
    
por 04.01.2011 / 17:47
11

Para ver a definição da função (ao contrário de onde ela veio), use:

declare -f <functionname>
    
por 20.05.2011 / 16:05
6

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.

    
por 24.05.2010 / 20:57
-2

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)

    
por 16.03.2012 / 14:42

Tags