mirror of
https://github.com/envmodules/modules.git
synced 2026-06-03 00:33:18 +08:00
According to ShellCheck's documentation: When command expansions are unquoted, word splitting and globbing will occur. This often manifests itself by breaking when filenames contain spaces. Related: https://www.shellcheck.net/wiki/SC2046 Related: #470
204 lines
5.2 KiB
Bash
Executable File
204 lines
5.2 KiB
Bash
Executable File
#! /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 \`@TCLSH@ '@libexecdir@/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 \`@TCLSH@ "@libexecdir@/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
|