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