v03i081: a csh alias to print out the path with reference numbers

Julian Cowley julian at uhccux.uhcc.hawaii.edu
Wed Jul 13 14:40:37 AEST 1988


Posting-number: Volume 3, Issue 81
Submitted-by: "Julian Cowley" <julian at uhccux.uhcc.hawaii.edu>
Archive-name: pathindex

[Another major motion picture from MISC. PRODUCTIONS:  PROMPT WARS!  Starring
 Luke Vaxwalker!  ;-)  (Blame the heat, 100 degrees again today!)  ++bsa]

While we are on the subject of csh aliases....

Those of you who use /usr/new/csh know that you can hit ctrl-D to
get a list of completions for file and command names.  If you complete a
command name, newcsh will print out a list of where the command
is in relation to your path, somewhat like whereis(1).  The output
looks something like this

% pwd^D
pwd 2	pwd 3
% pwd_

if your path variable is ( . /usr/ucb /bin /usr/bin /usr/local ),
meaning that `pwd' can be found in /bin and /usr/bin.

The numbers stand for the position of the command in your path
variable, beginning with 0.  As special cases, + means an alias,
- means a built-in command, and . means the current directory.

I needed a command that would print out the numbers before each
element of my path variable.  Instead of using a shell script, I
decided to battle it out with the csh alias mechanism.  It took
nearly two hours (:-), and here's what I came up with:

alias paths	set nonomatch \; \
		@ i=0 \; \
		repeat \$\#path eval \'echo -n \$i \"\" \; \
			@ i++ \; \
			echo \$path\[\$i\]\' \; \
		unset i \; \
		unset nonomatch

If your path is set as above, this will print out:

0 .
1 /usr/ucb
2 /bin
3 /usr/bin
4 /usr/local

This exploits some of the more obscure aspects of the csh and
doesn't use any external commands or shells (as far as I can determine).
It should be fun for any csh beginner to figure out how it works.
Have fun!

Julian Cowley, U. of Hawaii at Manoa
julian at uhccux.uhcc.hawaii.edu
...!ihnp4!ucsd!nosc!uhccux!julian
julian at uhccux.bitnet



More information about the Comp.sources.misc mailing list