¿Cómo documentar mis alias y funciones de bash personalizadas?

11

Problema:

Tengo múltiples funciones de bash y alias. No puedo recordar todos ellos de la parte superior de mi cabeza, así que por lo general terminan abriendo .bash_functionsy .bash_aliasesarchivos para encontrar lo que necesito.

Pregunta (s):

¿Cómo puedo enumerar funciones / alias disponibles desde el indicador bash?

¿Es posible para mí documentar mis funciones / alias bash usando comentarios (como PHPDoc)?

Solo me gustaría una manera simple / agradable de generar lo que está disponible sin tener que abrir los archivos. Sería genial ejecutar un comando y hacerlo escupir una lista dinámica de mis funciones / alias (los ejemplos de uso serían una ventaja). :)

mhulse
fuente

Respuestas:

17

Para enumerar los alias activos, ejecute:

alias

Para ver los nombres de todas las funciones activas, ejecute:

declare -F

Para ver los nombres y definiciones de todas las funciones activas, ejecute:

declare -f

Más

La información sobre alias también está disponible en un formato amigable con scripts con:

declare -p BASH_ALIASES

man bashproporciona más información sobre la aliasconstrucción:

   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.

En cuanto a las funciones, man bashexplica que declarepuede proporcionar aún más información disponible si extdebugse establece la opción:

   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).

Enlaces

  1. http://ss64.com/bash/alias.html
  2. http://linfo.org/alias.html
John1024
fuente
¡Decir ah! Demasiado fácil. ¡Gracias! Eso es muy facil. ¿Algún consejo para enumerar funciones personalizadas?
mhulse
1
@mhulse De nada. Ver actualización de funciones.
John1024
¡Gracias por la actualización! Veo que agregaste la declareinformación. ¡Gracias! Podría vivir con declarey aliaspara una visualización rápida y fácil. Acabo de notar que puedo hacer lo declare -f treeque escupe solo la treefunción. ¡Frio! Estoy vendido. ¡Gracias de nuevo! (Puedo aceptar esto como respuesta en 4 minutos.)
mhulse
2
@ashumeow El texto de ss64.com en ss64.com/bash/alias.html con sus términos de derechos de autor y distribución ss64.com/docs/copyright.html (¡no comercial!) ROMPE los términos de GFDL, la licencia del bash manual, porque incluyen texto de gnu.org/software/bash/manual/html_node/Aliases.html : se debe permitir el uso comercial de los trabajos derivados del manual de Bash. Su compilación sin referencias no parece agradable por este y otros motivos de atribución similares.
imz - Ivan Zakharyaschev
Es posible que la técnica ilustrada en Procesamiento más simple de opciones de script de shell sea ​​útil.
DocSalvager
7

Utilizo la siguiente función y javadoc como comentarios para crear una opción --help para mis 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;
}

En https://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh puedes ver cómo se usa dentro de un script real.

Kasper van den Berg
fuente
¡Esto es realmente genial! Ojalá pudiera dar marcas de verificación verdes para múltiples respuestas. Gracias Kasper! No puedo esperar para probar esto. :)
mhulse
Sigo obteniendo grep: : No such file or directorycuando intento ejecutarlo a través de unix / bash como una función. ... Sé que esta pregunta es antigua, pero ¿podría dar un ejemplo de cómo se podría ejecutar esto solo como una función bash a través de la línea de comandos? ¡¡¡Gracias!!! :)
mhulse
1
@mhulse, olvidé mencionar que necesitas definir PROG=$0; respuesta actualizada
Kasper van den Berg
Gracias Kasper! Realmente quiero que esto funcione, pero hasta ahora no tengo suerte. Odiaría seguir molestando, pero ¿podría proporcionar una llamada de ejemplo desde la línea de comando bash? Además, ¿cómo podría configurar --helpo -help(es decir, if echo "$@" | egrep -q -e '(-h)|(--help)'; then ...me encantaría configurar mi .bash_functions/ aliasespara permitir aliasname -ho function arg --help. ¡Gracias de nuevo!
mhulse
1
@mhulse La llamada de ejemplo desde la línea de comandos en generateReport.shsí solo es útil si desea indexar documentos médicos a través de Zylab y consultarlos a través de Aida. Sin embargo, para probar el uso función de ayuda la siguiente: wget https://raw.githubusercontent.com/kaspervandenberg/aida/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh && chmod a+x generateReport.sh && ./generateReport.sh --help. Cómo lograr la segunda parte con el uso aliasnamede .bash_functions que (todavía) no sé.
Kasper van den Berg