julian@uhccux.uhcc.hawaii.edu (Julian Cowley) (07/13/88)
Posting-number: Volume 3, Issue 81 Submitted-by: "Julian Cowley" <julian@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@uhccux.uhcc.hawaii.edu ...!ihnp4!ucsd!nosc!uhccux!julian julian@uhccux.bitnet