findcmd: Find a Command in Your Search Path

UNIX has utilities like whereis () and which () to look for a command on the system. But whereis doesn't look in your shell's search path, so it may not find shell scripts in local system directories or your bin directory (). And to use which, you have to know the exact name of the command, because which only shows the first command with that name in your path.

If you're like me, you can't always remember the name of the command you're looking for. "Wasn't it called reference or refer or something like that?" The findcmd script saves me a lot of guessing. It shows all command names, in all directories in my search path, that contain some string. So, I'll look for command names that have "ref" in them:

% findcmd ref /home/jerry/.bin/zrefile /usr/bin/X11/xrefresh /usr/local/bin/grefer /bin/cxref /bin/refer /usr/bin/cxref /usr/bin/refer ./preferences


findcmd After a couple of tries, I usually find the command I want. The findcmd script is on the tutorial.

First, the script edits a copy of your PATH () to change any current directory entry to a dot (:.:). Next, a colon (:) in the IFS () variable lets the shell split the PATH at the colons; a for loop () steps through each directory in the PATH and runs ls -l to find matching files. Finally, a sed () script reads through the output of all the ls commands in the loop, editing and printing matching lines (executable files with the program name we want).

- JP