[vox-tech] Bash completion mystery

Chanoch (Ken) Bloom kbloom at gmail.com
Sat Feb 25 16:04:47 PST 2012


On Fri, 2012-02-24 at 07:55 -0800, Wes Hardaker wrote:
> >>>>> On Thu, 23 Feb 2012 19:51:27 -0800, Bryan Richter <bryan.richter at gmail.com> said:
> 
> BR> Functions can be discovered with 'declare -f'.
> 
> The problem with todays environment is that there is real-executables,
> aliases and functions.  Aliases are pretty much lame in bash so everyone
> uses functions (which can take arguments, etc).
> 
> But in the end, there are in fact 3 places to look for a definition.  So
> about a month ago I wrote this:
> 
>     wh()       {
>         prog="$1"
>         if [ "`declare -F $prog`" != "" ] ; then
>             declare -f $prog
>         elif alias $prog > /dev/null 2>&1 ; then
>             alias $prog
>         else
>             which $prog
>         fi
>     }
> 
> Which if you use in replace of `which` checks all three sources and
> reports the definition or location to you.


Just use bash's `type` builtin instead. It covers everything you must
mentioned, plus it identifies bash builtins.



type: type [-afptP] name [name ...]
    Display information about command type.
    
    For each NAME, indicate how it would be interpreted if used as a
    command name.
    
    Options:
      -a	display all locations containing an executable named NAME;
    	includes aliases, builtins, and functions, if and only if
    	the `-p' option is not also used
      -f	suppress shell function lookup
      -P	force a PATH search for each NAME, even if it is an alias,
    	builtin, or function, and returns the name of the disk file
    	that would be executed
      -p	returns either the name of the disk file that would be
executed,
    	or nothing if `type -t NAME' would not return `file'.
      -t	output a single word which is one of `alias', `keyword',
    	`function', `builtin', `file' or `', if NAME is an alias, shell
    	reserved word, shell function, shell builtin, disk file, or not
    	found, respectively
    
    Arguments:
      NAME	Command name to be interpreted.
    
    Exit Status:
    Returns success if all of the NAMEs are found; fails if any are not
found.



More information about the vox-tech mailing list