>#! /bin/bash
>umask 022
>export PATH=".:~/bin:/bin:/usr/bin"
>export HOME=`(cd ~; pwd)`
>touch cat; chmod 755 cat; pwd
/home/carlo/c/which
>alias

>which
Usage: which [options] [--] programname [...]
Options: --version, -[vV] Print version and exit successfully.
         --help,          Print this help and exit successfully.
         --skip-dot       Skip directories in PATH that start with a dot.
         --skip-tilde     Skip directories in PATH that start with a tilde.
         --show-dot       Don't expand a dot to current directory in output.
         --show-tilde     Output a tilde for HOME directory for non-root.
         --tty-only       Stop processing options on the right if not on tty.
         --all, -a        Print all matches in PATH, not just the first
         --read-alias, -i Read list of aliases from stdin.
         --skip-alias     Ignore option --read-alias; don't read stdin.
         --read-functions Read shell functions from stdin.
         --skip-functions Ignore option --read-functions; don't read stdin.

>which --version
GNU which v2.16, Copyright (C) 1999 - 2003 Carlo Wood.
GNU which comes with ABSOLUTELY NO WARRANTY;
This program is free software; your freedom to use, change
and distribute this program is protected by the GPL.

>which -- --version
which: no --version in (.:~/bin:/bin:/usr/bin)

>which cat
/home/carlo/c/which/cat

>which --show-tilde cat
~/c/which/cat

>which --show-dot cat
./cat

>which --show-tilde --show-dot cat
./cat

>which --skip-dot cat
/bin/cat

>(cd /bin; which cat)
/bin/cat

>(cd /bin; which --show-dot cat)
./cat

>(cd /bin; PATH=".:/bin:/usr/bin" which --show-dot cat)
./cat

>(cd /bin; PATH="/bin:.:/usr/bin" which --show-dot cat)
/bin/cat

>(cd /bin; PATH=".:/bin:/usr/bin" which --skip-dot --show-dot cat)
/bin/cat

>which ls
/bin/ls

>which xxx
which: no xxx in (.:~/bin:/bin:/usr/bin)

>which ./ls
which: no ls in (.)

>(cd /; which bin/ls)
/bin/ls

>(cd /; which --show-dot bin/ls)
./bin/ls

>(cd /; which --show-dot /bin/ls)
/bin/ls

>(cd /; which --show-dot bin/xxx)
which: no xxx in (./bin)

>(cd /; which --show-dot /bin/xxx)
which: no xxx in (/bin)

>which --all cat
/home/carlo/c/which/cat
/bin/cat

>touch xxx
>which ./xxx
which: no xxx in (.)

>chmod 711 xxx
>which ./xxx
/home/carlo/c/which/xxx

>chmod 655 cat
>which cat
/bin/cat

>su
>chown root cat
>exit
>which cat
/home/carlo/c/which/cat

>su
>chmod 545 cat
>exit
>which cat
/bin/cat

>su
>chgrp bin cat
>exit
>which cat
/home/carlo/c/which/cat

>su
>chmod 541 cat
>exit
>which cat
/home/carlo/c/which/cat
>su
>rm -f cat

>chown root xxx
>exit
>which ./xxx
/home/carlo/c/which/xxx

>su
>chmod 700 xxx
>exit
>which ./xxx
which: no xxx in (.)

>id
uid=500(carlo) gid=500(carlo) groups=500(carlo),0(root)
>ls -l xxx
-rwx------    1 root     carlo           0 Sep 15 04:16 xxx
>su
>chmod 750 xxx
>chgrp carlo xxx
>exit
>which ./xxx
/home/carlo/c/which/xxx

>su
>chgrp bin xxx
>exit
>which ./xxx
which: no xxx in (.)

>alias which='alias | which --tty-only --read-alias --show-tilde --show-dot'
>alias test1='test1'
>alias test2='echo "test2" | cat | sort'
>alias test3='  echo "test2"|cat&sort'
>alias test4='	ls &&sort ||/usr/bin/which || exit'

>which which
alias which='alias | which --tty-only --read-alias --show-tilde --show-dot'
	./which
>which test1
alias test1='test1'
>which test2
alias test2='echo test2 | cat | sort'
	/bin/echo
	/bin/cat
	/bin/sort
>which test3
alias test3='  echo test2|cat&sort'
	/bin/echo
	/bin/cat
	/bin/sort
>which test4
alias test4='	ls &&sort ||/usr/bin/which || exit'
	/bin/ls
	/bin/sort
	/usr/bin/which
