Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!ames!pasteur!ucbvax!decwrl!labrea!Portia!forel!karish From: karish@forel.stanford.edu (Chuck Karish) Newsgroups: comp.unix.questions Subject: Re: Which shell language should I use? Summary: sh, for scripts Message-ID: <1932@Portia.Stanford.EDU> Date: 29 Apr 89 08:59:15 GMT References: <113700004@uxa.cso.uiuc.edu> Sender: USENET News System Reply-To: karish@forel.stanford.edu (Chuck Karish) Organization: Mindcraft, Inc. Lines: 52 In article <113700004@uxa.cso.uiuc.edu> gsg0384@uxa.cso.uiuc.edu wrote: >1. How much of the Berkeley-originated script files were written >in Bourn-shell language? A good exercise for the original poster. Write a script to look for csh syntax/magic cookies in all the scripts on your machine. I'd use `find', `file', and `sed' to do it. > It seems to me that such practice enhances >portability. I'd like to hear some opinion on which shell-sript >language is preferable for what purpose. I agree. csh is not present on all systems, and differs from implementation to implementation, mostly because a few vendors ship ancient versions. The most portable scripts use the subset of the modern sh language that's supported by the V7/BSD sh program. sh is a better language than csh for writing complex programs. Its quoting syntax is less idiosyncratic, and its flow-of-control operators work with pipes and redirection. In sh, it's possible to redirect the output of a `while' loop. In csh, you'd have to create a subshell yourself. Similarly, sh lets you redirect different output streams of the same command to different files; under csh, you'd have to use another subshell. >2. I found that the first line of a shell-script file is special > even though it contains '#'. Sometimes I found, and sometimes not, >#!/bin/csh ... Some systems read the first line, and use this as the name of the interpretor to use. Some just recognize the '#' as the first character in the file as a signal to use csh. The default is to use sh, if no magic cookie at all is found. Does not work at all unless the script is invoked from execlp() or execvp(). >3. Where in the UNIX manual can I find some kind of rule on which > shell-script parser is applied for a certain shell-script file? execl(3), execve(2) Chuck Karish {decwrl,hpda}!mindcrf!karish (415) 493-7277 karish@forel.stanford.edu