NetBSD/gnu/dist/postfix/mantools/enter

146 lines
3.8 KiB
Bash
Executable File

#!/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)
#--