To get the absolute pathname of a command, Korn shell users can run whence . bash users have type . On other shells, use which ( 50.8 ) . But those will only show the first directory in your PATH ( 6.4 ) with that command. If you want to find other commands with the same name in other directories, the standard which won't show them to you. (The which on the CD-ROM will - if you use its - a option. So will the bash command type -all .) whereiz will:
%which grep
/usr/bin/grep %whereiz grep
/usr/bin/grep /usr/5bin/grep
On my system, the /usr/bin directory holds a Berkeley-like version of a command. The /usr/5bin directory holds System V versions. /usr/bin is first in my path, but it's good to know if there's also a System V version. whereiz also lets you see if there are both local and system versions of the same command in your path.
Here's the script. The name ends in a z because many UNIX versions already have a whereis ( 50.5 ) command.
&& |
#! /bin/sh # COMMAND THAT TESTS FOR EXECUTABLE FILES... SYSTEM-DEPENDENT: testx="test -x" # REPLACE NULL FIELD IN $PATH WITH A . fixpath="`echo $PATH | sed \ -e 's/^:/.:/' \ -e 's/::/:.:/g' \ -e 's/:$/:./'`" IFS=": " # SET $IFS (COLON, SPACE, TAB) FOR PARSING $PATH for command do where="" # ZERO OUT $where # IF DIRECTORY HAS EXECUTABLE FILE, ADD IT TO LIST: for direc in $fixpath do $testx $direc/$command && where="$where $direc/$command" done case "$where" in ?*) echo $where ;; # IF CONTAINS SOMETHING, OUTPUT IT esac done |
---|
The
sed
(
34.24
)
command "fixes" your
PATH
. It replaces a null directory name (
::
in the middle of the
PATH
or a single
:
at the start or end of the
PATH
), which stands for the current directory. The null member is changed to the
relative pathname for the current directory, a dot (
1.21
)
, so the
direc
shell variable in the loop won't be empty. In line 12, the double quotes (
""
) have colon, space, and tab characters between them.
This sets the
IFS
(
35.21
)
variable to split the "fixed" search path, at the colon
characters, into separate directories during the
for
loop (
44.16
)
. That's a useful way to handle any colon-separated list.
-