Index: ossp-pkg/rc/rc-sample.pod RCS File: /v/ossp/cvs/ossp-pkg/rc/rc-sample.pod,v rcsdiff -q -kk '-r1.1' '-r1.2' -u '/v/ossp/cvs/ossp-pkg/rc/rc-sample.pod,v' 2>/dev/null --- rc-sample.pod 2002/01/23 16:39:53 1.1 +++ rc-sample.pod 2002/01/28 16:23:20 1.2 @@ -155,15 +155,120 @@ =head1 USE CASE: Dynamic User Environment (DUE) - .... +=over 4 -# rc configuration for Dynamic User Environment (DUE) -Dirs .:..// -Name .duerc -RequireUmask 022 -RequireOwner $USER -RequireGroup %{GROUP} +=item F<$HOME/.bashrc> - .... + cd () { + eval `rc --eval --conf=$HOME/.duecf - leave` + builtin cd ${1+"$@"} + eval `rc --eval --conf=$HOME/.duecf - enter` + } + +=item F<$HOME/.duecf> + + Dirs .:..// # current and all parent dirs + Name .duerc + NameGlobal $HOME/.dueglobal:/etc/dueglobal + RequireUmask 022 + RequireOwner %{USER} + RequireGroup %{GROUP} + Functions $HOME/.duefunc + +=item F<$HOME/.duefunc> + + # append (or optionally prepend) one or more directories (optionally + # have to be existing) to a colon-separated path variable. In case a + # directory already exists, it is first removed. + # + # Usage: duePathAdd [-p] [-e] [ ...] + # Example: duePathAdd -e PATH /bin /sbin /usr/bin /usr/sbin /usr/ccs/bin + # + duePathAdd () { + _prepend=0 + _exists=0 + while [ $# -gt 0 ]; do + case $1 in + -p ) _prepend=1; shift ;; + -e ) _exists=1; shift ;; + * ) break ;; + esac + done + _var="$1" + shift + _edit_del="" + _edit_add="" + for _dir in "$@"; do + if [ ".${_exists}" = .1 ] && [ ! -d "${_dir}" ]; then + continue + fi + _edit_del="${_edit_del} -e 's;^${_dir}\$;;' -e 's;^${_dir}:;;'" + _edit_del="${_edit_del} -e 's;:${_dir}:;:;' -e 's;:${_dir}\$;;'" + if [ ".${_prepend}" = .0 ]; then + _edit_add="${_edit_add} -e 's;\$;:${_dir};'" + else + _edit_add="-e 's;^;${_dir}:;' ${_edit_add}" + fi + done + if [ ".${_edit_del}${_edit_add}" != . ]; then + eval "${_var}=\`echo \"\$${_var}\" | sed ${_edit_del} ${_edit_add}\`" + fi + unset _prepend _exists _var _edit_del _edit_add _dir + } + + # + # remove one or more directories from a colon-separated path variable + # + # Usage: duePathDel [ ...] + # Example: duePathDel PATH /bin /sbin /usr/bin /usr/sbin /usr/ccs/bin + # + duePathDel () { + _var="$1" + shift + _edit="" + for _dir in "$@"; do + _edit="${_edit} -e 's;^${_dir}\$;;' -e 's;^${_dir}:;;'" + _edit="${_edit} -e 's;:${_dir}:;:;' -e 's;:${_dir}\$;;'" + done + eval "${_var}=\`echo \"\$${_var}\" | sed ${_edit}\`" + unset _var _edit _dir + } + + +=item F + + + duePathAdd PATH $CWD/bin $CWD/sbin + duePathAdd MANPATH $CWD/man + duePathAdd INFOPATH $CWD/info + duePathAdd LD_LIBRARY_PATH $CWD/lib + + + duePathDel PATH $CWD/bin $CWD/sbin + duePathDel MANPATH $CWD/man + duePathDel INFOPATH $CWD/info + duePathDel LD_LIBRARY_PATH $CWD/lib + + +=item F<$HOME/.dueglobal> + + + + duePathAdd PATH /cw/bin /cw/sbin + duePathAdd MANPATH /cw/man + duePathAdd INFOPATH /cw/info + duePathAdd LD_LIBRARY_PATH /cw/lib + + + duePathDel PATH /cw/bin /cw/sbin + duePathDel MANPATH /cw/man + duePathDel INFOPATH /cw/info + duePathDel LD_LIBRARY_PATH /cw/lib + + + + ... + =cut +