44 lines
		
	
	
	
		
			852 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			852 B
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| # which - emulation of `which' as it appears in FreeBSD
 | |
| #
 | |
| # usage: which [-as] command [command...]
 | |
| #
 | |
| 
 | |
| which()
 | |
| {
 | |
| 	local aflag sflag ES a
 | |
| 
 | |
| 	OPTIND=1
 | |
| 	while builtin getopts as opt ; do
 | |
| 		case "$opt" in
 | |
| 		a)	aflag=-a ;;
 | |
| 		s)	sflag=1 ;;
 | |
| 		?)	echo "which: usage: which [-as] command [command ...]" >&2
 | |
| 			exit 2 ;;
 | |
| 		esac
 | |
| 	done
 | |
| 
 | |
| 	(( $OPTIND > 1 )) && shift $(( $OPTIND - 1 ))
 | |
| 
 | |
| 	# without command arguments, exit with status 1
 | |
| 	ES=1
 | |
| 
 | |
| 	# exit status is 0 if all commands are found, 1 if any are not found
 | |
| 	for command; do
 | |
| 		# if $command is a function, make sure we add -a so type
 | |
| 		# will look in $PATH after finding the function
 | |
| 		a=$aflag
 | |
| 		case "$(builtin type -t $command)" in
 | |
| 		"function")	a=-a;;
 | |
| 		esac
 | |
| 
 | |
| 		if [ -n "$sflag" ]; then
 | |
| 			builtin type -p $a $command >/dev/null 2>&1
 | |
| 		else
 | |
| 			builtin type -p $a $command
 | |
| 		fi
 | |
| 		ES=$?
 | |
| 	done
 | |
| 
 | |
| 	return $ES
 | |
| }
 | 
