enter   [plain text]


#!/bin/sh

# enter - set up project-specific environment

# @(#) enter.sh 1.5 11/4/89 15:56:03

# initialize

IFS=" 	
"

: ${HOME?} ${SHELL=/bin/sh} make sure these are set

# sanity checks...

test $# = 1 || { 
    echo "Usage: ${0} project" 1>&2; exit 1
}

test -r ${HOME}/.${1} || { 
    echo "${0}: can't read environment file: '${HOME}/.${1}'" 1>&2; exit 1
}

test -x ${SHELL} || { 
    echo "${0}: can't execute command shell: '${SHELL}'" 1>&2; exit 1
}

# set up default Bourne-shell prompt

export PS1; PS1="$1%${PS1- }"

# load environment 

. ${HOME}/.${1}

# define UPPER and lower-case environment variables with the project name

_PNAME_=`echo ${1} | case \`echo -n\` in		# assume $1 lower case
			"") tr a-z A-Z;;		# this is for V7, BSD
			 *) tr '[a-z]' '[A-Z]';;	# and this is for SYSV
		     esac`
eval ${1}=\${${_PNAME_}=\${${1}}}

eval test "X\${${1}}" != X || { 
    echo "${0}: ${HOME}/.${1} should set '${1}' or '${_PNAME_}'" 1>&2; exit 1
}

export ${1} MANPATH PATH ${_PNAME_}

# become a new shell

echo "Entering project '${1}' - leave with 'exit' or 'control-d'" 1>&2

exec ${SHELL} 

echo "project ${1} NOT entered" 1>&2; exit 1;

#++
# NAME
#	enter 1
# SUMMARY
#	set up a project-specific environment
# PROJECT
#	sdetools
# SYNOPSIS
#	enter project
#	exit
# DESCRIPTION
#	The \fIenter\fR command sets up an environment that makes
#	it easy to access \fIproject\fR-specific programs and files.
#
#	\fIenter\fP consults a file with environment information
#	($HOME/.\fIproject\fR, Bourne-shell syntax) and invokes 
#	a new command shell of the same type as the login shell.
#	Typically, project environment files are maintained and 
#	given out by the project administrator.
#
#	In order to leave the project environment use the \fIexit\fP 
#	command or type a control-d;
#	the details may depend on the type of login shell involved.
#
#	As a minimum, the environment file should set an environment
#	variable with the same name as the \fIproject\fP. The variable 
#	name can be either be identical to \fIproject\fP or in upper case.
#	For consistency, \fIenter\fP will set both variables to the same value.
# EXAMPLE
# .fi
# .ad
#	In this example, 
#	all files pertaining to a project \fIfoobar\fR are located under the
#	directory \fI/usr/foo/bar/foobar\fR. For example, there
#	are subdirectories
#	\fI/usr/foo/bar/foobar/man\fR with manual pages, 
#	\fI/usr/foo/bar/foobar/bin\fR with executable 
#	programs, other directories for object libraries and include files, 
#	and so on.
#
#	In order to enter a project \fIfoobar\fR, the command
# .PP
# .ti +5
# .ft C
#	enter foobar
# .ft 
# .PP
#	consults a file \fI.foobar\fR (in the user\'s home directory) 
#	with contents:
# .PP
# .ft C
# .nf
# .in +5
#	export FOOBAR;	FOOBAR=/usr/foo/bar/foobar
#	export PATH;	PATH=$PATH:$FOOBAR/bin
#	export MANPATH;	MANPATH=$MANPATH:$FOOBAR/man
# .ft 
# .fi
# .PP
#	The second line automatically makes all project-specific 
#	executable programs accessible. The third line makes it possible 
#	to use the standard UNIX \fIman\fR command for retrieval of 
#	project-specific manual pages. The \fIenter\fR command
#	makes sure that both the \fIfoobar\fR and \fIFOOBAR\fR
#	environment variables are set to the same value.
# COMMANDS
#	sh(1), echo(1), test(1), tr(1), login shell
# FILES
#	$HOME/.\fIproject\fR
# ENVIRONMENT VARIABLES
#	SHELL, login shell
#	HOME, login directory
#	PATH, search path for commands
#	MANPATH, search path for the \fIman\fR command.
# BUGS
#	Name clashes may occur if people have entered several projects
#	at the same time. This can be avoided by using unique project names,
#	which is a good idea anyway.
# AUTHOR(S)
#	W.Z. Venema
#	Eindhoven University of Technology
#	Department of Mathematics and Computer Science
#	Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
# CREATION DATE
#	Tue Apr 19 15:35:41 MET DST 1988
# STATUS
#	enter.sh 1.5 11/4/89 15:56:03 (draft)
#--