¿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). :)
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).
¡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.)
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;doif( echo "${line}"| grep -q '{@param [^}]*}');then# color parameter and echo evaulated valueeval 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');fidone;}
¡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é.
declare
información. ¡Gracias! Podría vivir condeclare
yalias
para una visualización rápida y fácil. Acabo de notar que puedo hacer lodeclare -f tree
que escupe solo latree
función. ¡Frio! Estoy vendido. ¡Gracias de nuevo! (Puedo aceptar esto como respuesta en 4 minutos.)Utilizo la siguiente función y javadoc como comentarios para crear una opción --help para mis scripts:
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.
fuente
grep: : No such file or directory
cuando 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!!! :)PROG=$0
; respuesta actualizada--help
o-help
(es decir,if echo "$@" | egrep -q -e '(-h)|(--help)'; then ...
me encantaría configurar mi.bash_functions
/aliases
para permitiraliasname -h
ofunction arg --help
. ¡Gracias de nuevo!generateReport.sh
sí 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 usoaliasname
de .bash_functions que (todavía) no sé.