Comment documenter mes fonctions et alias bash personnalisés?

11

Problème:

J'ai plusieurs fonctions et alias bash. Je ne me souviens pas tous d'eux du haut de ma tête, donc je finis généralement par ouvrir mes fichiers .bash_functionset .bash_aliasespour trouver ce dont j'ai besoin.

Des questions):

Comment puis-je répertorier les fonctions / alias disponibles à partir de l'invite bash?

Est-il possible pour moi de documenter mes fonctions / alias bash en utilisant des commentaires (un peu comme PHPDoc)?

Je voudrais juste un moyen simple / agréable de sortir ce qui est disponible sans avoir à ouvrir les fichiers. Ce serait cool d'exécuter une commande et de lui faire cracher une liste dynamique de mes fonctions / alias (des exemples d'utilisation seraient un plus). :)

mhulse
la source

Réponses:

17

Pour répertorier les alias actifs, exécutez:

alias

Pour voir les noms de toutes les fonctions actives, exécutez:

declare -F

Pour voir les noms et définitions de toutes les fonctions actives, exécutez:

declare -f

Plus

Les informations sur les alias sont également disponibles sous forme de script avec:

declare -p BASH_ALIASES

man bashfournit plus d'informations sur la fonction aliasintégrée:

   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 ce qui concerne les fonctions, man bashexplique que declarepeut fournir encore plus d'informations est disponible si l' extdebugoption est définie:

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

Liens

  1. http://ss64.com/bash/alias.html
  2. http://linfo.org/alias.html
John1024
la source
Ha! Trop facile. Merci! C'est assez simple. Des conseils sur la liste des fonctions personnalisées?
mhulse
1
@mhulse Votre bienvenue. Voir mise à jour pour les fonctions.
John1024
Merci pour la mise à jour! Je vois que vous avez ajouté l' declareinfo. Je vous remercie! Je pourrais vivre avec declareet aliaspour une visualisation rapide et facile. Je viens de remarquer que je peux faire declare -f treece qui ne crache que la treefonction. Cool! Je suis vendu. Merci encore! (Je peux accepter cela comme réponse dans 4 minutes.)
mhulse
2
@ashumeow Le texte de ss64.com sur ss64.com/bash/alias.html avec leurs conditions de copyright et de distribution ss64.com/docs/copyright.html (non commercial!) BRISER les termes de GFDL - la licence de bash manuel, car ils contiennent du texte de gnu.org/software/bash/manual/html_node/Aliases.html : l'utilisation commerciale des œuvres dérivées du manuel Bash doit être autorisée. Leur compilation sans références ne semble pas agréable pour cela et pour des raisons d'attribution similaires.
imz - Ivan Zakharyaschev
Vous pouvez trouver la technique illustrée dans Traitement plus simple des options de script shell utile.
DocSalvager
7

J'utilise la fonction suivante et javadoc comme des commentaires pour créer une option --help pour mes 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;
}

Sur https://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh, vous pouvez voir comment il est utilisé dans un script réel.

Kasper van den Berg
la source
C'est vraiment cool! J'aimerais pouvoir donner des coches vertes pour plusieurs réponses. Merci Kasper! J'ai hâte de l'essayer. :)
mhulse
Je continue à obtenir grep: : No such file or directoryen essayant de l'exécuter via unix / bash en tant que fonction. … Je sais que cette question est ancienne, mais pourriez-vous donner un exemple sur la façon dont on pourrait exécuter cela tout comme seulement une fonction bash via la ligne de commande? Merci!!! :)
mhulse
1
@mhulse, j'ai oublié de mentionner que vous devez définir PROG=$0; réponse mise à jour.
Kasper van den Berg,
Merci Kasper! Je veux vraiment que ça marche, mais je n'ai pas de chance pour l'instant. Je détesterais continuer à vous embêter, mais pourriez-vous fournir un exemple d'appel à partir de la ligne de commande bash? Aussi, comment pourrais-je configurer --helpou -help(c'est-à-dire if echo "$@" | egrep -q -e '(-h)|(--help)'; then .... J'adorerais configurer mon .bash_functions/ aliasespour autoriser aliasname -hou function arg --help. Merci encore!
mhulse
1
@mhulse L'exemple d'appel de la ligne de commande generateReport.shelle-même n'est utile que si vous aimez indexer des documents médicaux via Zylab et les interroger via Aida. Cependant, pour essayer la fonction d'aide utiliser ce qui suit: wget https://raw.githubusercontent.com/kaspervandenberg/aida/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh && chmod a+x generateReport.sh && ./generateReport.sh --help. Comment réaliser la deuxième partie avec l'utilisation aliasnamede .bash_functions je ne sais pas (encore).
Kasper van den Berg