1#
2# An almost-ksh compatible `whence' command.  This is as hairy as it is 
3# because of the desire to exactly mimic ksh.
4# 
5# This depends somewhat on knowing the format of the output of the bash
6# `builtin type' command.
7#
8# Chet Ramey
9# chet@ins.CWRU.Edu
10#
11whence()
12{
13	local vflag= path=
14
15	if [ "$#" = "0" ] ; then
16		echo "whence: argument expected"
17		return 1
18	fi
19	case "$1" in
20		-v) vflag=1
21		    shift 1
22		    ;;
23		-*) echo "whence: bad option: $1"
24		    return 1
25		    ;;
26		 *) ;;
27	esac
28
29	if [ "$#" = "0" ] ; then
30		echo "whence: bad argument count"
31		return 1
32	fi
33
34	for cmd
35	do
36		if [ "$vflag" ]	 ; then
37			echo $(builtin type $cmd | sed 1q)
38		else
39			path=$(builtin type -path $cmd)
40			if [ "$path" ] ; then
41				echo $path
42			else
43				case "$cmd" in
44					/*) if [ -x "$cmd" ]; then
45						echo "$cmd"
46					    fi
47					    ;;
48					 *) case "$(builtin type -type $cmd)" in
49						"") ;;
50						 *) echo "$cmd"
51						    ;;
52					    esac
53					    ;;
54				esac
55			fi
56		fi
57	done
58	return 0
59}
60