| # |
| # An almost-ksh compatible `whence' command. This is as hairy as it is |
| # because of the desire to exactly mimic ksh. |
| # |
| # This depends somewhat on knowing the format of the output of the bash |
| # `builtin type' command. |
| # |
| # Chet Ramey |
| # chet@ins.CWRU.Edu |
| # |
| # |
| # Chet Ramey <chet.ramey@case.edu> |
| # |
| # Copyright 1994 Chester Ramey |
| # |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 2, or (at your option) |
| # any later version. |
| # |
| # TThis program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; if not, write to the Free Software Foundation, |
| # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| |
| whence() |
| { |
| local vflag= path= |
| |
| if [ "$#" = "0" ] ; then |
| echo "whence: argument expected" |
| return 1 |
| fi |
| case "$1" in |
| -v) vflag=1 |
| shift 1 |
| ;; |
| -*) echo "whence: bad option: $1" |
| return 1 |
| ;; |
| *) ;; |
| esac |
| |
| if [ "$#" = "0" ] ; then |
| echo "whence: bad argument count" |
| return 1 |
| fi |
| |
| for cmd |
| do |
| if [ "$vflag" ] ; then |
| echo $(builtin type $cmd | sed 1q) |
| else |
| path=$(builtin type -path $cmd) |
| if [ "$path" ] ; then |
| echo $path |
| else |
| case "$cmd" in |
| /*) if [ -x "$cmd" ]; then |
| echo "$cmd" |
| fi |
| ;; |
| *) case "$(builtin type -type $cmd)" in |
| "") ;; |
| *) echo "$cmd" |
| ;; |
| esac |
| ;; |
| esac |
| fi |
| fi |
| done |
| return 0 |
| } |