Telling csh about multiple, machine-dependent libraries

Chris Torek chris at mimsy.UUCP
Fri Nov 18 04:42:39 AEST 1988


[`heart-of-gold' is not in the UUCP maps, and linus claims never to have
heard of the machine, although the news path is linus!heart-of-gold!jc;
what goes on here?]

In article <173 at heart-of-gold> jc at heart-of-gold (John M Chambers) writes:
>| set mtype = bin
>| if (`sun2`) set mtype = sun2
>| if (`sun3`) set mtype = sun3
>| if (`sun4`) set mtype = sun4
>| set path=(. ~/{$mtype,sh,csh,awk} /bin /usr/{ucb,etc,local,local/{$mtype,sh},bin,lib,dos,hosts,games,demo,NeWS/{bin,demo}} /etc)

The proper syntax is

	if ( { program } ) ...

The {} pair will substitute for the () pair, so you can write

	if { program } ...

or in this case

	if { sun2 } set mtype = sun2
	if { sun3 } set mtype = sun3
	if { sun4 } set mtype = sun4

>...  I've tried a few other variants, includeing such things as
>	sun3 && set mtype = sun3

This should work.  If you have the `machine' command (and it does
the right thing) you can also use

	switch (`machine`)
	case sun2:
		set mtype = sun2
		breaksw
	case sun3:
		set mtype = sun3
		breaksw
	case sun4:
		set mtype = sun4
		breaksw
	default:
		echo "unknown machine type `machine`"
		breaksw
	endsw

or (much simpler)

	set mtype = `machine`

>For that matter, the above code, if taken to a machine that lacks, e.g., 
>a `sun4` command, bombs out and fails to read the rest of .cshrc, so this 
>is obviously not a general approach.

This is one reason `machine` is preferable if available.  csh does not
have a convenient way to test the existence of a program; but you can
always use a Bourne shell script instead:

	set mtype = `sh .get-machine`

where `.get-machine' reads

	if (set -e; machine) >/dev/null 2>&1; then
		machine
	else
		echo "no \`\`machine'' command; assuming \`\`bin''" 1>&2
		echo bin
	fi
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163)
Domain:	chris at mimsy.umd.edu	Path:	uunet!mimsy!chris



More information about the Comp.unix.questions mailing list