Como documentar minhas funções e aliases personalizados do bash?


11

Problema:

Eu tenho várias funções e aliases do bash. Não consigo me lembrar de todos eles em cima da minha cabeça, então geralmente acabo abrindo meus arquivos .bash_functionse .bash_aliasespara encontrar o que preciso.

Questões):

Como posso listar funções / aliases disponíveis no prompt do bash?

É possível para mim documentar minhas funções / aliases bash usando comentários (como o PHPDoc)?

Gostaria apenas de uma maneira simples / agradável de exibir o que está disponível sem precisar abrir os arquivos. Seria legal executar um comando e cuspir uma lista dinâmica de minhas funções / aliases (exemplos de uso seriam uma vantagem). :)

Respostas:


17

Para listar aliases ativos, execute:

alias

Para ver os nomes de todas as funções ativas, execute:

declare -F

Para ver os nomes e as definições de todas as funções ativas, execute:

declare -f

Mais

As informações sobre aliases também estão disponíveis em um formato compatível com scripts com:

declare -p BASH_ALIASES

man bashfornece mais informações sobre o aliasbuiltin:

   alias [-p] [name[=value] ...]
          Alias with  no  arguments  or  with  the  -p
          option  prints  the  list  of aliases in the
          form alias name=value  on  standard  output.
          When  arguments  are  supplied,  an alias is
          defined for each name whose value is  given.
          A  trailing  space in  value causes the next
          word to be checked  for  alias  substitution
          when  the  alias is expanded.  For each name
          in the argument list for which no  value  is
          supplied, the name and value of the alias is
          printed.  Alias returns true unless  a  name
          is   given  for  which  no  alias  has  been
          defined.

Em relação às funções, man bashexplica que declarepode fornecer ainda mais informações disponíveis se a extdebugopção estiver configurada:

   Function  names  and definitions may be listed with
   the -f option to the  declare  or  typeset  builtin
   commands.  The -F option to declare or typeset will
   list the function names only  (and  optionally  the
   source  file and line number, if the extdebug shell
   option is enabled).

Ligações

  1. http://ss64.com/bash/alias.html
  2. http://linfo.org/alias.html

Ha! Muito fácil. Obrigado! Isso é bem fácil. Alguma dica sobre como listar funções personalizadas?
Mhulse # 9/14

1
@mhulse De nada. Veja a atualização para funções.
10139 John1024

Obrigado pela atualização! Vejo que você adicionou as declareinformações. Obrigado! Eu poderia viver com declaree aliaspara uma visualização rápida e fácil. Acabei de perceber que posso fazer o declare -f treeque cospe apenas a treefunção. Legal! Eu estou vendido. Obrigado novamente! (Eu posso aceitar isso como resposta em 4 minutos.)
mhulse

2
@ashumeow O texto do ss64.com em ss64.com/bash/alias.html com seus termos de direitos autorais e distribuição ss64.com/docs/copyright.html (não comercial!) BREAK os termos do GFDL - a licença do bash manual, porque incluem texto de gnu.org/software/bash/manual/html_node/Aliases.html : o uso comercial dos trabalhos derivados do manual do Bash deve ser permitido. Sua compilação sem referências não parece boa por isso e por razões de atribuição semelhantes.
imz - Ivan Zakharyaschev

Você pode encontrar a técnica ilustrada em Processamento mais simples de opções de script de shell .
DocSalvager 15/05

7

Eu uso a seguinte função e javadoc como comentários para criar uma opção --help para meus scripts:

PROG=$0 #The program name, used within doHelp

# Print a help message
# doHelp uses lines starting with ## to create the output
# the tags {@param ...} and {@code ...} colorize words
doHelp() {
grep '^##' "${PROG}" |
sed -e 's/^##[[:space:]]*//' |
while read line; do
    if ( echo "${line}" | grep -q '{@param [^}]*}' ); then
        # color parameter and echo evaulated value
        eval echo -e $(echo ${line} | sed \
            -e 's/^\(.*\){@param \([^}]*\)}\(.*\)$/\
            \"\1\\\\E[32;40m\2\\\\E[37;40m\\t(value: \"$\2\")\3\"/');
    else
        # other color commands
        echo -e $(echo ${line} | sed \
            -e 's/{@code \([^}]*\)}/\\E[36;40m\1\\E[37;40m/g');
    fi
done;
}

Em https://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh, você pode ver como é usado em um script real.


Isso é muito legal! Eu gostaria de poder dar uma marca de verificação verde para várias respostas. Obrigado Kasper! Mal posso esperar para experimentar isso. :)
mhulse

Eu continuo recebendo grep: : No such file or directoryao tentar executá-lo via unix / bash como uma função. … Eu sei que essa pergunta é antiga, mas você poderia dar um exemplo de como alguém executaria isso apenas como uma função bash via linha de comando? Obrigado!!! :)
mhulse

1
@ mhulse, esqueci de mencionar que você precisa definir PROG=$0; resposta atualizada.
Kasper van den Berg

Obrigado Kasper! Eu realmente quero fazer isso funcionar, mas não estou tendo nenhuma sorte até agora. Eu odiaria continuar incomodando você, mas você poderia fornecer uma chamada de exemplo da linha de comando do bash? Além disso, como eu poderia configurar --helpou -help(ou seja, if echo "$@" | egrep -q -e '(-h)|(--help)'; then ...eu gostaria de configurar o meu. .bash_functions/ aliasesPara permitir aliasname -hou function arg --helpObrigado novamente.!
mhulse

1
@mhulse A chamada de exemplo da generateReport.shprópria linha de comando só é útil se você quiser indexar documentos médicos via Zylab e consultá-los via Aida. No entanto, para tentar o uso função ajuda o seguinte: wget https://raw.githubusercontent.com/kaspervandenberg/aida/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh && chmod a+x generateReport.sh && ./generateReport.sh --help. Como alcançar a segunda parte usando o aliasname.bash_functions (ainda) não sei.
Kasper van den Berg
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.