Wie dokumentiere ich meine benutzerdefinierten Bash-Funktionen und Aliase?

11

Problem:

Ich habe mehrere Bash-Funktionen und Aliase. Ich kann mich nicht an alle erinnern, also öffne ich normalerweise meine .bash_functionsund .bash_aliasesDateien, um zu finden, was ich brauche.

Fragen):

Wie kann ich Funktionen / Aliase auflisten, die an der Bash-Eingabeaufforderung verfügbar sind?

Kann ich meine Bash-Funktionen / Aliase mithilfe von Kommentaren dokumentieren (ähnlich wie bei PHPDoc)?

Ich möchte nur eine einfache / nette Möglichkeit, das, was verfügbar ist, auszugeben, ohne die Dateien öffnen zu müssen. Es wäre cool, einen Befehl auszuführen und eine dynamische Liste meiner Funktionen / Aliase auszuspucken (Verwendungsbeispiele wären ein Plus). :) :)

mhulse
quelle

Antworten:

17

Führen Sie Folgendes aus, um aktive Aliase aufzulisten:

alias

Führen Sie Folgendes aus, um die Namen aller aktiven Funktionen anzuzeigen:

declare -F

Führen Sie Folgendes aus, um die Namen und Definitionen aller aktiven Funktionen anzuzeigen:

declare -f

Mehr

Die Informationen zu Aliasen sind ebenfalls in einem skriptfreundlichen Format verfügbar mit:

declare -p BASH_ALIASES

man bashbietet weitere Informationen zum aliaseingebauten:

   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.

In Bezug auf Funktionen wird man basherklärt, dass declarenoch mehr Informationen verfügbar sind, wenn die extdebugOption gesetzt ist:

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

Links

  1. http://ss64.com/bash/alias.html
  2. http://linfo.org/alias.html
John1024
quelle
Ha! Zu einfach. Vielen Dank! Das ist ziemlich einfach. Irgendwelche Tipps zum Auflisten benutzerdefinierter Funktionen?
Mhulse
1
@mhulse Gern geschehen. Siehe Update für Funktionen.
John1024
Danke für das Update! Ich sehe, Sie haben die declareInformationen hinzugefügt . Vielen Dank! Ich könnte mit declareund aliasfür schnelles und einfaches Betrachten leben. Mir ist gerade aufgefallen, dass ich das kann, declare -f treewas nur die treeFunktion ausspuckt . Cool! Ich bin verkauft. Danke noch einmal! (Ich kann dies als Antwort in 4 Minuten akzeptieren.)
mhulse
2
@ashumeow Der Text von ss64.com unter ss64.com/bash/alias.html mit den Copyright- und Vertriebsbedingungen ss64.com/docs/copyright.html (nicht kommerziell!) BRECHEN Sie die Bedingungen von GFDL - die Lizenz der Bash Handbuch, da sie Text aus gnu.org/software/bash/manual/html_node/Aliases.html enthalten : Die kommerzielle Verwendung der abgeleiteten Werke des Bash-Handbuchs sollte gestattet sein. Ihre Zusammenstellung ohne Referenzen scheint aus diesem und ähnlichen Gründen nicht gut zu sein.
imz - Ivan Zakharyaschev
Möglicherweise ist die unter Einfachere Verarbeitung von Shell-Skriptoptionen dargestellte Technik von Nutzen.
DocSalvager
7

Ich verwende die folgende Funktion und javadoc-ähnliche Kommentare, um eine --help-Option für meine Skripte zu erstellen:

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;
}

Unter https://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh können Sie sehen, wie es in einem tatsächlichen Skript verwendet wird.

Kasper van den Berg
quelle
Das ist wirklich cool! Ich wünschte, ich könnte grüne Häkchen für mehrere Antworten setzen. Danke Kasper! Ich kann es kaum erwarten, das auszuprobieren. :)
mhulse
Ich bekomme immer wieder, grep: : No such file or directorywenn ich versuche, es über Unix / Bash als Funktion auszuführen. … Ich weiß, dass diese Frage alt ist, aber können Sie ein Beispiel geben, wie man dies nur als Bash-Funktion über die Befehlszeile ausführen würde? Vielen Dank!!! :)
mhulse
1
@mhulse, ich habe vergessen zu erwähnen, dass Sie definieren müssen PROG=$0; Antwort aktualisiert.
Kasper van den Berg
Danke Kasper! Ich möchte das wirklich zum Laufen bringen, aber ich habe bisher kein Glück. Ich würde es hassen, Sie weiterhin zu nerven, aber könnten Sie einen Beispielaufruf über die Bash-Befehlszeile bereitstellen? Auch, wie könnte richte ich --helpoder -help(dh if echo "$@" | egrep -q -e '(-h)|(--help)'; then ...ich würde mein Setup lieben. .bash_functions/ aliasesZu erlauben aliasname -hoder function arg --helpNochmals vielen Dank.!
mhulse
1
@mhulse Der Beispielaufruf über die Befehlszeile generateReport.shselbst ist nur nützlich, wenn Sie medizinische Dokumente über Zylab indizieren und über Aida abfragen möchten. Verwenden Sie jedoch Folgendes, um die Hilfefunktion zu testen : wget https://raw.githubusercontent.com/kaspervandenberg/aida/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh && chmod a+x generateReport.sh && ./generateReport.sh --help. Wie man den zweiten Teil mit aliasname.bash_functions erreicht, weiß ich (noch) nicht.
Kasper van den Berg