Eu posso digitar alias para mostrar uma lista de todos os aliases.
Mas para funções, tudo o que posso fazer é cumprimentar .bash_profile
.
Isso apenas obtém os que estão no arquivo, não os definidos em arquivos subsidiários ou dinamicamente.
Existe uma maneira mais conveniente de descobrir quais funções estão definidas atualmente?
Respostas:
declare -F
Manual de Referência do Bash
fonte
shopt -s extdebug
) E fornecer um ou mais nomes de funções para odeclare -F
comando. IOW,declare -F
se não fornecer nomes de arquivos / linha # s mesmo quando extdebug está habilitado, que não é clara a partir da documentação, nem é particularmente intuitiva, IMO.Supondo que o shell bash:
listará as funções.
listará apenas os nomes das funções.
fonte
Obsolete. See `help declare'.
lhe dará os nomes de todas as funções
fornecerá a fonte para uma função específica
fonte
declare -F
realmente imprime comandos declare e não apenas nomes de funções:Você pode usar
compgen -A function
para imprimir apenas nomes de funções:fonte
compgen -A function
era exatamente o que eu estava procurando.compgen -a -A function
compgen -A function | grep "^[a-z]\+" | grep -vE "^dequote|^quote|^in_array"
typeset está obsoleto, use:
ou
ou
fonte
No lugar do grep, você também pode usar o fgrep ou o hgrep (o hgrep é o meu favorito, é o grep, mas acelera o resultado do 'grep-ped'.
O hgrep pode ser encontrado aqui: ACME Labs hgrep
fonte
set | grep " () $" | cut -d' ' -f1
. Mas é excessivamente complicado em comparação com as outras respostas.grep
não é uma boa solução para isso, seqüências de caracteres que correspondem às definições de função causam falsos positivos. O @wjandrea ainda pode ser capturado por sequências de várias linhas, assim como qualquer regex.Não sou especialista nisso, ainda estou aprendendo, mas depois de encontrar essa pergunta e sua resposta porque queria o mesmo, escrevi o seguinte (com base no " resposta " A declaração do arquetípico Paulo ") para me dar o que eu última análise: uma lista formatada de aliases e funções:
Isso foi antes de eu ver a resposta de Lri e, assim, extrapolando disso, substituí o
declare
ealias
linhas peloscompgen
comandos apropriados , para obter:Woks um deleite para o que eu queria. Compartilhar caso ajude mais alguém.
Há uma infinidade de outras "ações" disponíveis para
compgen -A [action]
(e outras opções, écompgen
claro). Encontrei uma boa redação aqui, que também inclui um link para a página do manual (porqueman compgen
não funciona em alguns casos).fonte