View file File name : add.modules Content :#! /bin/sh # # ADD.MODULES, Adds $ETC/*.modules to the $HOME/.login, .cshrc, .profile, # .bashrc & .kshenv # Copyright (C) 2000-2017 R.K. Owen # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. ########################################################################## VERSION='$Id: 196cf1d4fbd7d3deecf648e85ee37ead75a60a93 $' SKEL=/etc/skel ETC=/skel /bin/cat <<! $0 adds a few lines to the beginning of your $HOME/.cshrc, $HOME/.login, $HOME/.profile, $HOME/.bashrc, and possibly your $HOME/.kshenv (or whatever is specified by the ENV environment variable). ! if [ -r $HOME/.bash_profile ]; then /bin/cat <<! Also your $HOME/.bash_profile will be processed. ! fi if [ -r $HOME/.bash_login ]; then /bin/cat <<! Also your $HOME/.bash_login will be processed. ! fi /bin/cat <<! The lines are prepended for sourcing the $ETC/csh.modules or $ETC/profile.modules files or to define the module alias or function. Why is it necessary? To ensure that you will have access to modules for all subshells, these lines need to be added to some of your 'dot' files. Your old .cshrc, .login, .profile, .bashrc and .kshenv will be renamed to .login.old, .cshrc.old, .profile.old, .bashrc.old and .kshenv.old respectively. So if you have any problems you will can easily restore them. This is version $VERSION . ! /bin/echo "Continue on (type n for no - default=yes)?\c" read xxx if [ x$xxx = xn ] then exit 1 fi # cleanse old dot file $1=file $2=clean temporary $3=file.old cleandot() { /bin/cat <<! Cleaning $1 ! mv $1 $3 sed \ -e "/^[ ]*if[ ]*([ ]*-e[ ].*\/csh\.modules[ ]*)[ ]*then[ ]*\$/,/^[ ]*endif[ ]*\$/d" \ -e "/^[ ]*if[ ]*\[[ ]*-[ef][ ].*\/profile\.modules[ ]*][ ]*\$/,/^[ ]*fi[ ]*\$/d" \ -e "/^[ ]*if[ ]*\[[ ]*-[ef][ ].*\/profile\.modules[ ]*].*then[ ]*\$/,/^[ ]*fi[ ]*\$/d" \ -e "/^[ ]*if[ ]*([ ]*\$?tcsh[ ]*)[ ]*then[ ]*\$/,/^[ ]*alias[ ]*module[ ]*.*\$/d" \ -e "/^[ ]*module().*[ ]*.*}[ ]*\$/d" \ -e "/^[ ]*case[ ]*\"\$0\"[ ]*in[ ]*\$/,/^[ ]*esac[ ]*\$/d" \ -e "/^[ ]*source[ ]*.*\/Modules.*\$/d" \ -e "/^[ ]*source[ ]*.*\/csh\.modules[ ]*/d" \ -e "/^[ ]*\.[ ]*.*\/profile\.modules[ ]*/d" \ $3 > $2 } # find if certain of the dot files have load lines already findload() { grep "^[ ]*module[ ]*load" $1 > /tmp/load.$$ } # put common stuff derivatives here $1=.dot_file $2=action $3=shell(csh,sh) $4=skel alternative shdot() { if [ -f $1 ] then /bin/cat <<! Processing your $1 (your old one is $1.old) ! if cleandot $1 /tmp/$1.$$ $1.old then if [ x$2 = xsource ] then /bin/cat <<! Adding sourcing lines at beginning of $1 ! if [ x$3 = xsh ] then findload $1.old /bin/cat > $1 <<! if [ -f $ETC/profile.modules ] then . $ETC/profile.modules # put your own module loads here ! if [ -s /tmp/load.$$ ] then /bin/cat /tmp/load.$$ >> $1 else /bin/cat >> $1 <<! module load null ! fi /bin/cat >> $1 <<! fi ! elif [ x$3 = xcsh ] then findload $1.old /bin/cat > $1 <<! if ( -e $ETC/csh.modules ) then source $ETC/csh.modules # put your own module loads here ! if [ -s /tmp/load.$$ ] then /bin/cat /tmp/load.$$ >> $1 else /bin/cat >> $1 <<! module load null ! fi /bin/cat >> $1 <<! endif ! fi /bin/cat /tmp/$1.$$ >> $1 && /bin/rm /tmp/$1.$$ elif [ x$2 = xalias ] then /bin/cat <<! Adding alias or function lines at beginning of $1 ! if [ x$3 = xsh ] then /bin/cat > $1 <<! case "\$0" in -sh|sh|*/sh) modules_shell=sh ;; -ksh|ksh|*/ksh) modules_shell=ksh ;; -zsh|zsh|*/zsh) modules_shell=zsh ;; -bash|bash|*/bash) modules_shell=bash ;; esac module() { eval \`/usr/bin/tclsh /usr/share/Modules/libexec/modulecmd.tcl \$modules_shell \$*\`; } ! elif [ x$3 = xcsh ] then /bin/cat > $1 <<! if (\$?tcsh) then set modules_shell="tcsh" else set modules_shell="csh" endif alias module 'eval \`/usr/bin/tclsh /usr/share/Modules/libexec/modulecmd.tcl '\$modules_shell '\!*\`' ! fi /bin/cat /tmp/$1.$$ >> $1 && /bin/rm /tmp/$1.$$ fi else /bin/echo "Had problems with your $1" fi else /bin/cat <<! You had no $1 as I see it. Copying $4 for you. ! /bin/cp $4 $1 fi /bin/rm /tmp/load.$$ 2> /dev/null } # process files in $HOME cd $HOME if [ -r .bash_profile ]; then shdot .bash_profile source sh $SKEL/.profile fi if [ -r .bash_login ]; then shdot .bash_login source sh $SKEL/.profile fi shdot .profile source sh $SKEL/.profile shdot .bashrc alias sh $SKEL/.kshenv shdot `basename ${ENV:=.kshenv}` alias sh $SKEL/.kshenv shdot .login source csh $SKEL/.login shdot .cshrc alias csh $SKEL/.cshrc exit