Come documentare le mie funzioni e alias bash personalizzati?


11

Problema:

Ho più funzioni e alias bash. Non riesco a ricordare tutti loro dalla parte superiore della mia testa, quindi di solito finisco per aprire il mio .bash_functionse .bash_aliasesfile per trovare quello che mi serve.

Domande):

Come posso elencare funzioni / alias disponibili dal prompt di bash?

Posso documentare le mie funzioni / alias bash usando i commenti (un po 'come PHPDoc)?

Vorrei solo un modo semplice / carino per produrre ciò che è disponibile senza dover aprire i file. Sarebbe bello eseguire un comando e farlo sputare un elenco dinamico delle mie funzioni / alias (gli esempi di utilizzo sarebbero un vantaggio). :)

Risposte:


17

Per elencare gli alias attivi, eseguire:

alias

Per vedere i nomi di tutte le funzioni attive, eseguire:

declare -F

Per vedere i nomi e le definizioni di tutte le funzioni attive, eseguire:

declare -f

Di Più

Le informazioni sugli alias sono anche disponibili in un formato intuitivo con:

declare -p BASH_ALIASES

man bashfornisce maggiori informazioni sull'integrato alias:

   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.

Per quanto riguarda le funzioni, man bashspiega che è declarepossibile fornire ulteriori informazioni se l' extdebugopzione è impostata:

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

link

  1. http://ss64.com/bash/alias.html
  2. http://linfo.org/alias.html

Ha! Troppo facile. Grazie! È abbastanza facile. Qualche consiglio su come elencare le funzioni personalizzate?
mhulse,

1
@mhulse Il tuo benvenuto. Vedi aggiornamento per le funzioni.
Giovanni 1024,

Grazie per l'aggiornamento! Vedo che hai aggiunto le declareinformazioni. Grazie! Potrei vivere con declaree aliasper una visione facile e veloce. Ho appena notato che posso fare declare -f treeche sputa solo la treefunzione. Freddo! Sono venduto. Grazie ancora! (Posso accettarlo come risposta in 4 minuti.)
mhulse

2
@ashumeow Il testo di ss64.com su ss64.com/bash/alias.html con i loro termini di copyright e distribuzione ss64.com/docs/copyright.html (non commerciale!) BREAK i termini di GFDL - la licenza di bash manuale, poiché includono il testo di gnu.org/software/bash/manual/html_node/Aliases.html : dovrebbe essere consentito l'uso commerciale delle opere derivate del manuale di Bash. La loro compilazione senza riferimenti non sembra piacevole per questo e simili motivi di attribuzione.
imz - Ivan Zakharyaschev,

È possibile trovare utile la tecnica illustrata nell'elaborazione più semplice delle opzioni di script di shell .
DocSalvager,

7

Uso la seguente funzione e javadoc come commenti per creare un'opzione --help per i miei script:

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

A https://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh puoi vedere come viene utilizzato all'interno di uno script reale.


Questo è davvero fantastico! Vorrei poter dare segni di spunta verdi per più risposte. Grazie Kasper! Non vedo l'ora di provarlo. :)
mhulse,

Continuo a ricevere grep: : No such file or directoryquando provo a eseguirlo tramite unix / bash come funzione. ... So che questa domanda è vecchia, ma potresti dare un esempio di come si eseguirà questa operazione solo come una funzione bash dalla riga di comando? Grazie!!! :)
mhulse il

1
@mhulse, ho dimenticato di dire che è necessario definire PROG=$0; risposta aggiornata.
Kasper van den Berg,

Grazie Kasper! Voglio davvero farlo funzionare, ma non ho avuto fortuna finora. Odio continuare a infastidirti, ma potresti fornire una chiamata di esempio dalla riga di comando bash? Inoltre, come ho potuto impostare --helpo -help(cioè, if echo "$@" | egrep -q -e '(-h)|(--help)'; then ...mi piacerebbe impostare il mio .bash_functions/ aliasesper consentire aliasname -ho function arg --help. Grazie ancora!
mhulse

1
@mhulse La chiamata di esempio dalla generateReport.shstessa riga di comando è utile solo se ti piace indicizzare i documenti medici tramite Zylab e interrogarli tramite Aida. Tuttavia, per provare l'uso di aiuto funzione di quanto segue: wget https://raw.githubusercontent.com/kaspervandenberg/aida/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh && chmod a+x generateReport.sh && ./generateReport.sh --help. Come ottenere la seconda parte usando aliasnamein .bash_functions non lo so (ancora).
Kasper van den Berg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.