Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

Problem:

I have multiple bash functions and aliases. I can't remember all of them off the top of my head, so I usually end up opening my .bash_functions and .bash_aliases files to find what I need.

Question(s):

How can I list functions/aliases available from the bash prompt?

Is it possible for me to document my bash functions/aliases using comments (kinda like PHPDoc)?

I'd just like a simple/nice way to output what's available without having to open the files. It would be cool to run a command and have it spit out a dynamic list of my functions/aliases (usage examples would be a plus). :)

share|improve this question

2 Answers 2

up vote 12 down vote accepted

To list active aliases, run:

alias

To see names of all active functions, run:

declare -F

To see the names and definitions of all active functions, run:

declare -f

More

The information on aliases is also available is a script-friendly format with:

declare -p BASH_ALIASES

man bash provides more info on the alias builtin:

   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.

Regarding functions, man bash explains that declare can provide still more information is available if the extdebug option is set:

   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
share|improve this answer
    
Ha! Too easy. Thanks! That's pretty easy. Any tips on listing custom functions? –  mhulse May 9 at 23:08
1  
@mhulse Your welcome. See update for functions. –  John1024 May 9 at 23:11
    
Thanks for the update! I see you added the declare info. Thank you! I could live with declare and alias for quick and easy viewing. I just noticed that I can do declare -f tree which spits out only the tree function. Cool! I'm sold. Thanks again! (I can accept this as answer in 4 minutes.) –  mhulse May 9 at 23:13
    
@ashumeow The ss64.com's text at ss64.com/bash/alias.html with their copyright and distribution terms ss64.com/docs/copyright.html (non-commercial!) BREAK the terms of GFDL--the license of the bash manual, because they include text from gnu.org/software/bash/manual/html_node/Aliases.html: commercial use of the derivative works of the Bash manual should be allowed. Their compilation without references doesn't seem nice for this and similar attribution reasons. –  imz -- Ivan Zakharyaschev May 10 at 13:14
    
You may find the technique illustrated in Simpler processing of shell script options to be of use. –  DocSalvage May 15 at 21:43

I use the following function and javadoc like comments to create a --help option for my scripts:

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

At https://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh you can see how it's used within an actual script.

share|improve this answer
    
This is really cool! I wish I could give out green check marks for multiple answers. Thanks Kasper! I can't wait to try this out. :) –  mhulse May 12 at 20:21

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.