which-2.1.tar.gz (ChangeLog since version 2.0)
Manual page
WHICH(1) WHICH(1)
NAME
which - show full path of commands
SYNOPSIS
which [options] [--] programname [...]
DESCRIPTION
Which takes one or more arguments. For each of its argu-
ments it prints to stdout the full path of the executables
that would have been executed when this argument had been
entered at the shell prompt. It does this by searching
for an executable or script in the directories listed in
the environment variable PATH using the same algorithm as
bash(1).
OPTIONS
--version
Print version information on standard output then 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
If a directory in PATH starts with a dot and a match-
ing executable was found for that path, then print
"./programname" rather than the full path.
--show-tilde
Output a tilde when a directory matches the HOME
directory. This option is ignored when which is
invoked as root.
--tty-only
Stop processing options on the right if not on tty.
--all, -a
Print all matching executables in PATH, not just the
first.
RETURN VALUE
Which returns the number of failed arguments, or -1 when
no programname was given.
EXAMPLE
A useful way to use this utility is by adding an alias for
which like the following:
alias which='which --tty-only --show-tilde --show-dot'
from your prompt, while still printing the full path when
used from a script:
> which q2
~/bin/q2
> echo `which q2`
/home/carlo/bin/q2
BUGS
If programname is an alias which starts a different exe-
cutable, then which will give the wrong path; it doesn't
do alias expansion.
AUTHOR
Carlo Wood (carlo@runaway.xs4all.nl)
SEE ALSO
bash(1)
Examples
>unalias which
>export PATH=".:~/bin:/bin:/usr/bin"
>export HOME=`(cd ~; pwd)`
>touch cat; chmod 755 cat; pwd
/home/carlo/c/which
>which
Usage: ./which [options] [--] programname [...]
Options: --version Print version 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 matching executables in PATH, not just the first
>which --version
GNU which v2.1, Copyright (C) 1999 Carlo Wood.
GNU which comes with ABSOLUTELY NO WARRANTY;
This program is free software; your freedom to use, change
and distribute this program is covered 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
>su
>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=100(users) groups=100(users),0(root),14(uucp),20(modem),200(libr),201(cvs)
>ls -l xxx
-rwx------ 1 root users 0 Apr 10 02:00 xxx*
>su
>chmod 750 xxx
>chgrp libr xxx
>exit
>which ./xxx
/home/carlo/c/which/xxx
>su
>chgrp bin xxx
>exit
>which ./xxx
which: no xxx in (.)