unix@cbosgd.UUCP (03/11/85)
From: Ron Heiby (The Moderator) <unix-request@cbosgd.UUCP> Unix Technical Discussions Sat, 09 Mar 1985 Volume 1 : Issue 4 Today's topics: Looking for good csh tutorial (2) Shells: programming and background pids (4) ---------------------------------------------------------------------- Date: 2 Feb 85 23:15:18 GMT From: wa371@sdcc12.UUCP (wa371) Subject: Where can I find tutorials on writing C-shell scripts? There seem to be many books and tutorials on UNIX, but they deal with the writing of shell scripts only in passing, if at all. Are there any texts or tutorials that teach the writing of scripts for the C-shell in some detail? Bernd Riechelmann (Not affiliated with U.C. San Diego) UUCP: ...!ucbvax!sdcsvax!sdcc12!wa371, ARPA: sdcsvax!sdcc12!wa371@nosc ------------------------------ Date: 6 Feb 85 00:00:28 GMT From: Greg McGary <lcc.gm@UCLA-LOCUS.ARPA> Subject: Re: Where can I find tutorials on writing C-shell scripts? The only tutorial I know of is Bill Joy's `An Introduction to the C-shell'. This article is included with the BSD documentation set in Volume 2 of the programmer's manual. I think you've already discovered that most tutorials are written for the Bourne shell. (/bin/sh) The general consensus is that Kernighan and Pike's `Unix Programming Environment' gives the best available treatment of the subject. Please do not shy away from learning the Bourne Shell because you feel you are most interested in the C-shell. The techniques of shell programming apply to both shells. Once you what you want to do with a shell program and generally how you want to do it, in most cases it is a simple matter of consulting the manual page to select the correct syntax. Also, you may discover (like many of us) that the Bourne Shell is really the shell of choice for programming. It is more capable and less buggy. Personally, I prefer the C-shell for interactive use (until the Korn Shell becomes available...) because of history, job control, and aliases. But for shell programming, I always use the Bourne Shell. Greg McGary Locus Computing Corp. lcc!gm@ucla-cs {ihnpr,randvax,sdcrdcf,ucbvax}!ucla-cs!lcc!gm {trwspp,ucivax}!ucla-va!ucla-cs!lcc!gm trwb!lcc!gm ------------------------------ Date: 12 Feb 85 21:24:00 GMT From: ss@wanginst.UUCP (Sid Shapiro) Subject: getting the pid from the csh Hi there unix-folks. In keeping with the discussions of a few weeks ago about how to automatically kill backgrounded process from the csh upon logout, I thought I'd ask the question another way. Or at least I thought I'd take another shot at it. I thought, if I could simply record the pid of the process in a file or variable, then, golly, killing it later would be easy. So I cheerfully set off to try and figure out how to capture the pid that is returned when you type foo& Well, after I exhausted all the variations I could think of, I went to the csh sources. It sure looked to me like the shell simply does a printf of the pid. But I'll be darned if I can redirect or backquote or set something to get that number. Can anyone offer words of wisdom? Thanks, Sid Shapiro -- Wang Institute of Graduate Studies [apollo, bbncca, ucadmus, decvax, linus, masscomp]!wanginst!ss ss%wang-inst@Csnet-Relay.ARPA (617)649-9731 ------------------------------ Date: 14 Feb 85 02:18:44 GMT From: msb@lsuc.UUCP (Mark Brader) Subject: Re: getting the pid from the csh In sh, on the other hand, you need only type: (foo&) 2>foo.pid Mark Brader ------------------------------ Date: 14 Feb 85 10:53:40 GMT From: rpw3@redwood.UUCP (Rob Warnock) Subject: Re: getting the pid from the csh In the Bourne Shell (either Edition 7 or 4.1bsd) the (parent) shell variable "$!" contains the process number of the last background process evoked. You don't need to write it into a file. Try: $ foo & $ ... # anything but another background invocation $ echo $! It works as documented. See "sh(1)". Rob Warnock Systems Architecture Consultant UUCP: {ihnp4,ucbvax!dual}!fortune!redwood!rpw3 DDD: (415)572-2607 USPS: 510 Trinidad Lane, Foster City, CA 94404 ------------------------------ Date: 14 Feb 85 14:24:45 GMT From: ss@wanginst.UUCP (Sid Shapiro) Subject: Re: getting the pid from the csh - answers I have had three replies. One that I had a little trouble relating to my question, so I won't bother repeating it. The second was from an unnamed person (I don't want to embarrass him) who cheerfully told me about a shell variable that got set in his shell, but not mine - (he didn't realize that his shell had been hacked in that way). And the third from wizard Spencer Thomas (thomas@utah-cs.ARPA). Spencer's was the most useful (no surprise there): >> Here is an alias we use to kill off selected or all jobs. Works sort >> of, most of the time. But, it does show how to get the (in this case) >> job id's of all your background or stopped tasks (the hard part is in >> /usr/local/killall, included below). The '%!$' at the end is to >> continue processes (such as Gosling emacs) that want to print something >> before they die. If a subprocess doesn't die on SIGTERM (e.g., a >> shell), this won't work correctly. >> >> alias res 'if ("\!$" == "*") source /usr/local/killall;'\ >> 'if ("\!$" != "*") kill %\!$; if ("\!$" != "*") %\!$' >> >> # kill all subprocesses of this shell. >> # >> jobs >~/.pcs >> foreach i (`sed 's/.*\[\(.*\)\].*/\1/' ~/.pcs`) >> res $i >> end With one mimor mod for me to pick up just the job I want killed, this worked like gangbusters. The only thing that puzzles me is that I tried some combinations of sed scripts originally a few months ago when I started this business and I had trouble - of course I don't remember what the trouble was... Oh well. Thanks for all your help, folks. / Sid / ------------------------------ End of Unix Technical Discussions ***************************** -- Ronald W. Heiby / ihnp4!{wnuxa!heiby|wnuxb!netnews} AT&T Information Systems, Inc. Lisle, IL (CU-D21)