Important .bashrc guidelines
From SciNetWiki
The file .bashrc, located in your home directory, is read-in and executed whenever a bash script or bash shell is started. The exception is for login shells, in which case .bash_profile is started. The default .bash_profile calls .bashrc so that many scinet users never need to edit .bash_profile.
This means in particular that the file .bashrc is read in
- when you log in
- when you run compute jobs
- when you run certain commands such as mpirun
- at the end of a job, when copying output and error files.
And that both on the GPS and the TCS, which nonetheless often require quite a different setup.
Guidelines
To avoid difficulties, you are advised to follow these guidelines in .bashrc:
- Sourcing /etc/profile and /etc/bashrc is required for various SciNet routines to work!
- Do not execute any commands that write to standard output, because that would breaks things like copying-out output files and scp. So for instance, no echo or module list.
- Load only commonly used modules.
- Distinguish, especially for the module command, between the gpc and tcs.
- If you're trying out different implementations or versions of a module (e.g. mpi), you should not load them in the .bashrc, but explicitly on the command line before compiling and once more explicitly in your job script.
- To avoid accidentally compiling on the login nodes, you can 'shield' yourself from the compilers by wrapping the module load commands with hostname check in the .bashrc file, e.g. as follows:
HOSTNAME=$(hostname) if [ "${HOSTNAME:0:6}" != "scinet" ]; then module load intel openmpi # and any other modules fi
Default .bashrc/.bash_profile
The default startup scripts provided by SciNet are as follows. Certain things - like sourcing /etc/profile and /etc/bashrc are required for various SciNet routines to work!
.bash_profile
if [ -f /etc/profile ]; then . /etc/profile fi # commands which work for both GPC and TCS can go here alias passwd='echo "Please use the SciNet portal to change password: https://portal.scinet.utoronto.ca/change_password"' # what machine/architecture HOSTNAME=$(hostname) case $(uname -p) in 'ppc64') MACHINE='p7';; 'powerpc') MACHINE='tcs';; 'x86_64') MACHINE='gpc';; *) MACHINE='unknown';; esac if uname -r | grep -q el5 then OS='centos5' elif uname -r | grep -q el6 then OS='centos6' elif uname -o | grep -q AIX then OS='aix' else OS='unknown' fi if [ "${MACHINE}" == "tcs" ] then # do things for the TCS machine alias llq1='/xcat/tools/tcs-scripts/LL/jobState.sh' alias llstat='/xcat/tools/tcs-scripts/LL/jobSummary.sh' if [ "${TERM}" = "xterm-color" ]; then export TERM=xterm fi # user environment for login shells goes here # replace colon with your own commands : elif [ "${MACHINE}" == "p7" ] then # do things for the P7 machine # user environment for login shells goes here # replace colon with your own commands : elif [ "${MACHINE}" == "gpc" ] then # do things for the GPC machine # user environment for login shells goes here # replace colon with your own commands : # os specific commands next if [ "${OS}" == "centos5" ] then #centos 5 specific login commands : elif [ "${OS}" == "centos6" ] then #centos 6 specific login commands : fi else echo "Not a recognized system" fi PS1="\h-\$ " if [ -f ~/.bashrc ]; then . ~/.bashrc fi
.bashrc
if [ -f /etc/bashrc ]; then . /etc/bashrc fi # commands which work for both GPC and TCS can go here export BASH_ENV=~/.bashrc # what machine/architecture HOSTNAME=$(hostname) case $(uname -p) in 'ppc64') MACHINE='p7';; 'powerpc') MACHINE='tcs';; 'x86_64') MACHINE='gpc';; *) MACHINE='unknown';; esac if uname -r | grep -q el5 then OS='centos5' elif uname -r | grep -q el6 then OS='centos6' elif uname -o | grep -q AIX then OS='aix' else OS='unknown' fi if [ "${MACHINE}" == "tcs" ] then # do things for the TCS machine # user environment for all shells goes here # replace colon with your own commands : elif [ "${MACHINE}" == "p7" ] then # do things for the P7 machine module load pe vacpp xlf # user environment for all shells goes here # replace colon with your own commands : elif [ "${MACHINE}" == "gpc" ] then # do things for the GPC machine module load intel openmpi # user environment for all shells goes here # replace colon with your own commands : # os specific commands/modules can be loaded next if [ "${OS}" == "centos5" ] then #centos 5 specific modules : elif [ "${OS}" == "centos6" ] then #centos 6 specific modules : fi else echo "Not a recognized system" fi