I have a lot of aliases and functions in my terminal, in addition to the plethora of UNIX commands. If I’m not sure what the source of a command is, getting info on it can require multiple tries. First a man
check, then a type
or alias
command to see if it’s custom, then a man -k
to see if I misspelled something, and so on. I eventually decided to just write an automated way to sift through those possibilities.
The function below will simply check if the command exists, then flip through “file,” “function,” and “alias” to see what kind it is, displaying the man page, typing out the function, or showing the alias depending on the result. It really just combines the man
and type
functionality into one command.
The only switch is -k
, which will show the results of man -k
if no matching command is found.
# A little helper for man/alias/function info
halp() {
local YELLOW="\033[0;33m" DEFAULT="\033[0;39m"
local apro=0 helpstring="Usage: halp COMMAND"
OPTIND=1
while getopts "kh" opt; do
case $opt in
k) apro=1 ;;
h) echo -e $helpstring; return;;
*) return 1;;
esac
done
shift $((OPTIND-1))
if [ $# -ne 1 ]; then
echo -e $helpstring
return 1
fi
local helpresult cmd=$1
local cmdtest=$(type -t ${cmd})
if [ -z "$cmdtest" ]; then
echo -e "${YELLOW}Not a command$DEFAULT"
if [[ $apro == 1 ]]; then
man -k $cmd
else
return 1
fi
fi
if [[ $cmdtest == "file" ]]; then
man $cmd
elif [[ $cmdtest == "alias" ]]; then
echo -ne "$YELLOW$cmd is an alias: $DEFAULT"
alias ${cmd}|sed -E "s/alias $cmd='(.*)'/\1/"
elif [[ $cmdtest == "function" ]]; then
echo -e "$YELLOW$cmd is a function: $DEFAULT"
type $cmd | tail -n +2
fi
}
I have this running with a modified version of bash-completion that scopes in the halp
command for tab-completing command names. Easy hack, so I won’t elaborate on that.
My where?
tool is also a handy companion to this if you have enough custom scripts and sourced files to make it useful.