Em geral, é impossível listar todas as funções sem executar o script, porque uma função poderia ser declarada por algo como eval $(/some/program)
. Mas se as funções forem declaradas "normalmente", você pode pesquisar coisas que se parecem com definições de funções.
grep -E '^[[:space:]]*([[:alnum:]_]+[[:space:]]*\(\)|function[[:space:]]+[[:alnum:]_]+)' myscript
Não há função de digitação ou documentação nos scripts de shell, então qualquer documentação teria que vir de comentários. Aqui está um trecho bruto de Perl que extrai definições de funções formatadas comumente, bem como comentários imediatamente anteriores ou posteriores.
perl -0777 -ne '
while (/^((?:[ \t]*\#.*\n)*) # preceding comments
[ \t]*(?:(\w+)[ \t]*\(\)| # foo ()
function[ \t]+(\w+).*) # function foo
((?:\n[ \t]+\#.*)*) # following comments
/mgx) {
$name = "$2$3";
$comments = "$1$4";
$comments =~ s/^[ \t]*#+/#/mg;
chomp($comments);
print "$name\n$comments\n";
}' myscript
Uma maneira mais precisa de imprimir nomes de funções, se você puder executar o script sem causar efeitos colaterais, ou se puder isolar todas as definições de funções em um subscrito, é executar o script e então fazer bash imprimir toda a função definições. Ao contrário do método de pesquisa de texto acima, isso inclui definições de função de formato estranho e exclui falsos positivos (por exemplo, aqui nos documentos), mas isso não pode encontrar comentários.
bash -c '. myscript; typeset -f'