home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume3 / pathindex < prev    next >
Internet Message Format  |  1989-02-03  |  2KB

  1. Path: xanth!mcnc!rutgers!ucsd!ames!necntc!ncoast!allbery
  2. From: julian@uhccux.uhcc.hawaii.edu (Julian Cowley)
  3. Newsgroups: comp.sources.misc
  4. Subject: v03i081: a csh alias to print out the path with reference numbers
  5. Summary: Another csh alias
  6. Message-ID: <8807130440.AA02403@uhccux.uhcc.hawaii.edu>
  7. Date: 13 Jul 88 04:40:37 GMT
  8. Sender: allbery@ncoast.UUCP
  9. Reply-To: julian@uhccux.uhcc.hawaii.edu (Julian Cowley)
  10. Organization: University of Hawaii at Manoa
  11. Lines: 56
  12. Approved: allbery@ncoast.UUCP
  13.  
  14. Posting-number: Volume 3, Issue 81
  15. Submitted-by: "Julian Cowley" <julian@uhccux.uhcc.hawaii.edu>
  16. Archive-name: pathindex
  17.  
  18. [Another major motion picture from MISC. PRODUCTIONS:  PROMPT WARS!  Starring
  19.  Luke Vaxwalker!  ;-)  (Blame the heat, 100 degrees again today!)  ++bsa]
  20.  
  21. While we are on the subject of csh aliases....
  22.  
  23. Those of you who use /usr/new/csh know that you can hit ctrl-D to
  24. get a list of completions for file and command names.  If you complete a
  25. command name, newcsh will print out a list of where the command
  26. is in relation to your path, somewhat like whereis(1).  The output
  27. looks something like this
  28.  
  29. % pwd^D
  30. pwd 2    pwd 3
  31. % pwd_
  32.  
  33. if your path variable is ( . /usr/ucb /bin /usr/bin /usr/local ),
  34. meaning that `pwd' can be found in /bin and /usr/bin.
  35.  
  36. The numbers stand for the position of the command in your path
  37. variable, beginning with 0.  As special cases, + means an alias,
  38. - means a built-in command, and . means the current directory.
  39.  
  40. I needed a command that would print out the numbers before each
  41. element of my path variable.  Instead of using a shell script, I
  42. decided to battle it out with the csh alias mechanism.  It took
  43. nearly two hours (:-), and here's what I came up with:
  44.  
  45. alias paths    set nonomatch \; \
  46.         @ i=0 \; \
  47.         repeat \$\#path eval \'echo -n \$i \"\" \; \
  48.             @ i++ \; \
  49.             echo \$path\[\$i\]\' \; \
  50.         unset i \; \
  51.         unset nonomatch
  52.  
  53. If your path is set as above, this will print out:
  54.  
  55. 0 .
  56. 1 /usr/ucb
  57. 2 /bin
  58. 3 /usr/bin
  59. 4 /usr/local
  60.  
  61. This exploits some of the more obscure aspects of the csh and
  62. doesn't use any external commands or shells (as far as I can determine).
  63. It should be fun for any csh beginner to figure out how it works.
  64. Have fun!
  65.  
  66. Julian Cowley, U. of Hawaii at Manoa
  67. julian@uhccux.uhcc.hawaii.edu
  68. ...!ihnp4!ucsd!nosc!uhccux!julian
  69. julian@uhccux.bitnet
  70.