Jak udokumentować moje niestandardowe funkcje i aliasy bash?

11

Problem:

Mam wiele funkcji i aliasów bash. Nie pamiętam ich wszystkich z głowy, więc zwykle otwieram pliki .bash_functionsi .bash_aliasespliki, aby znaleźć to, czego potrzebuję.

Pytania):

Jak mogę wyświetlić listę funkcji / aliasów dostępnych w wierszu poleceń bash?

Czy mogę udokumentować moje funkcje / aliasy bash przy użyciu komentarzy (trochę jak PHPDoc)?

Chciałbym po prostu w prosty / przyjemny sposób wyprowadzić to, co jest dostępne, bez konieczności otwierania plików. Fajnie byłoby uruchomić polecenie i wyrzucić dynamiczną listę moich funkcji / aliasów (przykłady użycia byłyby plusem). :)

mhulse
źródło

Odpowiedzi:

17

Aby wyświetlić listę aktywnych aliasów, uruchom:

alias

Aby zobaczyć nazwy wszystkich aktywnych funkcji, uruchom:

declare -F

Aby zobaczyć nazwy i definicje wszystkich aktywnych funkcji, uruchom:

declare -f

Więcej

Dostępne są również informacje o aliasach w formacie przyjaznym dla skryptów z:

declare -p BASH_ALIASES

man bashzapewnia więcej informacji na temat aliaswbudowanego:

   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.

man bashWyjaśnia to w odniesieniu do funkcjideclare może dostarczyć jeszcze więcej informacji, jeśli extdebugjest ustawiona opcja:

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

Spinki do mankietów

  1. http://ss64.com/bash/alias.html
  2. http://linfo.org/alias.html
John1024
źródło
Ha! Zbyt łatwe. Dzięki! To całkiem proste. Wszelkie wskazówki dotyczące wyświetlania niestandardowych funkcji?
mhulse
1
@mhulse Nie ma za co. Zobacz aktualizację funkcji.
John1024
Dziękuję za aktualizację! Widzę, że dodałeś declareinformacje. Dziękuję Ci! Mógłbym żyć z declarei aliasdla szybkiego i łatwego oglądania. Właśnie zauważyłem, że mogę to zrobić, declare -f treeco wyrzuca tylko treefunkcję. Chłodny! Jestem sprzedany. Dzięki jeszcze raz! (Mogę zaakceptować to jako odpowiedź w ciągu 4 minut.)
mhulse
2
@ashumeow Tekst ss64.com na ss64.com/bash/alias.html wraz z warunkami dotyczącymi praw autorskich i dystrybucji ss64.com/docs/copyright.html (niekomercyjny!) BREAK warunki GFDL - licencja bash manual, ponieważ zawierają tekst z gnu.org/software/bash/manual/html_node/Aliases.html : komercyjne wykorzystanie dzieł pochodnych podręcznika Bash powinno być dozwolone. Ich kompilacja bez odniesień nie wydaje się przyjemna z tego i podobnych powodów przypisania.
imz - Ivan Zakharyaschev
Technika zilustrowana w Prostszym przetwarzaniu opcji skryptu powłoki może okazać się przydatna.
DocSalvager
7

Używam następującej funkcji i komentarzy typu javadoc, aby utworzyć opcję --help dla moich skryptów:

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

Na https://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh możesz zobaczyć, jak jest używany w rzeczywistym skrypcie.

Kasper van den Berg
źródło
To jest naprawdę fajne! Chciałbym rozdawać zielone znaczniki wyboru dla wielu odpowiedzi. Dzięki Kasper! Nie mogę się doczekać, aby to wypróbować. :)
mhulse
Wciąż grep: : No such file or directorypróbuję uruchomić go za pomocą unix / bash jako funkcji. … Wiem, że to pytanie jest stare, ale czy możesz podać przykład, w jaki sposób można uruchomić to tak samo, jak tylko funkcję bash za pośrednictwem wiersza poleceń? Dzięki!!! :)
mhulse
1
@mhulse, zapomniałem wspomnieć, że musisz zdefiniować PROG=$0; odpowiedź zaktualizowana.
Kasper van den Berg
Dzięki Kasper! Naprawdę chcę, żeby to zadziałało, ale jak dotąd nie mam szczęścia. Nie chciałbym cię denerwować, ale czy możesz podać przykładowe połączenie z linii poleceń bash? Ponadto, jak mogłem skonfigurować --helplub -help(tj if echo "$@" | egrep -q -e '(-h)|(--help)'; then .... Chciałbym skonfigurować moje .bash_functions/, aliasesaby zezwolić na aliasname -hlub function arg --help. Dzięki jeszcze raz!
mhulse
1
@mhulse Przykładowe wywołanie z samego wiersza poleceń generateReport.shjest przydatne tylko wtedy, gdy chcesz indeksować dokumenty medyczne za pośrednictwem Zylab i wyszukiwać je za pośrednictwem Aida. Jednak, aby spróbować użyć funkcji pomocy następuje: wget https://raw.githubusercontent.com/kaspervandenberg/aida/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh && chmod a+x generateReport.sh && ./generateReport.sh --help. Jak osiągnąć drugą część za pomocą funkcji aliasname.bash_funkcje Nie wiem (jeszcze).
Kasper van den Berg