home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / sys / 3b1 / 2971 < prev    next >
Encoding:
Text File  |  1992-07-29  |  2.7 KB  |  63 lines

  1. Newsgroups: comp.sys.3b1
  2. Path: sparky!uunet!cs.utexas.edu!usc!zaphod.mps.ohio-state.edu!moe.ksu.ksu.edu!mdsol1!alembic!ceilidh!hijo-2!dnichols
  3. From: dnichols@ceilidh.beartrack.com (Don Nichols (DoN.))
  4. Subject: Re: tcsh question
  5. Message-ID: <1992Jul30.001523.8258@ceilidh.beartrack.com>
  6. Organization: D and D Data, Vienna Virginia
  7. References: <1992Jul29.141150.28545@brtph560.bnr.ca>
  8. Date: Thu, 30 Jul 1992 00:15:23 GMT
  9. Lines: 52
  10.  
  11. In article <1992Jul29.141150.28545@brtph560.bnr.ca> hruska@bnr.ca (Bob Hruska) writes:
  12. >I am using tcsh on my 7300, it is the following version:
  13.  
  14. >version tcsh 6.01.00 (Cornell) 12/19/91 options 8b,dl,al,dir
  15.  
  16.  
  17. >My question is, why can't I run any /bin/sh scripts from it?
  18. >If I put the #!/bin/sh at the beginning, it doesn't work.
  19.  
  20.     [ ... ]
  21.  
  22. >If I do "sh scriptname" it works, but just "scriptname" gives
  23. >me "if: Expression Syntax."
  24.  
  25. >Any ideas?
  26.  
  27.     Sure!  tcsh is a csh derivitave which uses a different syntax for
  28. most control structures.  Your "#!/bin/sh" would work in a BSD-derived
  29. system, or other variants as well, but not under this old a SysV.  The
  30. ability to act on '#!' is a special case of magic number recognition done by
  31. the kernel.  The SysV kernel that we have doesn't know about this particular
  32. magic number, so tcsh is left to try to figure out how to deal with the
  33. script, and fails.
  34.  
  35.     There are some examples of scripts which can tell which shell they
  36. are running under, and take steps to correct it.  Pnews uses:
  37.  
  38.     ": use /bin/sh"
  39.  
  40. Where the ':' character must be the first character of the file.  (The rest
  41. is not important, except as a flag to the human examining the script.)  This
  42. works because csh won't accept that as a pseudo-comment, but will recognize
  43. it as meaning that the script must be run by /bin/sh.  It is not as general
  44. a solution as '#!' is, but it was developed back when the choices were
  45. /bin/sh or /wherever/csh, so if it wasnt' csh, it *must* be for sh :-)
  46.  
  47.     There are other ways for a perl script to recognize when it is
  48. running under some other shell and start up the perl interpreter, but it is
  49. even more ugly than this.  There are *some* shells around which will do the
  50. '#!' interpretation on their own, but this only works if they see it before
  51. the wrong other shell does.  Zsh claims to do this, but I haven't gotten it
  52. running smoothly under 3.51m yet.  (It does work well under SunOs 4.1.1,
  53. however, which doesn't need the interpretation, since SunOs is BSD derived.
  54. :-)
  55.  
  56.     Good Luck
  57.         DoN.
  58. -- 
  59. Donald Nichols (DoN.)     | Voice (Days): (703) 704-2280 (Eves): (703) 938-4564
  60. D&D Data                  |  Email: <dnichols@ceilidh.beartrack.com>
  61. I said it - no one else   |         <dnichols@ceilidh.aes.com>
  62.     --- Black Holes are where God is dividing by zero ---
  63.