SuSE 7.3 Bash Initialization

SuSE 7.3 Bash Initialization

Keith Winston

This is an overview of what gets set where when you use a bash shell in SuSE. The process works a little differently if you are running a different shell (zsh, ksh, [t]csh, etc.).

The files are processed in this order:

/etc/profile

global config, initializes the terminal (sets the TERM variable and unsets TERMCAP since SuSE uses terminfo instead of termcap), sets umask 022, sets initial PATH, MANPATH and a few other variables, sources /etc/SuSEconfig/profile, sources all *.sh files in /etc/profile.d/, sources /etc/profile.local, sources /etc/bash.bashrc, sources ~/.bashrc. It includes code to prevent ~/.bashrc from running more than once depending on whether it has already been executed.

/etc/SuSEconfig/profile

this file is generated by SuSEconfig from settings in the /etc/rc.config file. It sets language environment variables, KDEDIR, QTDIR, PRINTER and WINDOWMANAGER.

/etc/profile.d/*.sh

application specific settings such as jade_dsl.sh, medusa-idled.sh (search engine used by nautilus), sp.sh, tetex.sh. Most of these were not activated for my installation.

/etc/profile.local

doesn't exist by default. Best place to put global aliases, global shell and environment variables, etc.

/etc/bash.bashrc

sets some shell functions (startx and remount), also sets some aliases (+=pushd, -=popd, o=less, others), sets the PS1 variable which controls the format of the prompt, sets other variables, if bash 2.0+ it also sources/etc/profile.d/complete.bash.

/etc/profile.d/complete.bash

sets a couple of shell options (shopt), customizes the bash “complete” builtin behavior (file completion). SuSE did some serious work to optimize this part of the bash configuration.

~/.bashrc

finally, your own bash settings are run. You can override anything that has been set previously since this file is sourced last (prompt, variables, etc.). The default SuSE .bashrc includes code to check for /etc/profile.dos and sources it if it exists. It also checks for ~/.alias and sources it if it exists.

/etc/profile.dos

sets up aliases for DOS commands (del, move, copy, etc.)

~/.alias

best place to put your custom alias definitions.

Then, bash looks for additional config files to run...

For login shells, it looks for these files, in order, and executes commands from the FIRST one that exists and is readable.

~/.bash_profile

doesn't exist by default.

~/.bash_login

doesn't exist by default. You can create it and put custom commands here that you only want to happen once when you first login. If this file exists, then the ~/.profile will not run. Normally, this is not a problem since ~/.profile does not do much and the ~/.bashrc gets sourced from /etc/profile.

~/.profile

sets LANG variable, sources /etc/profile, iF it has not already been run (checks PROFILEREAD variable), sources ~/.bashrc, runs the fortune program if you uncomment it.

For interactive non-login shells, bash looks for this file:

~/.bashrc

this is where most custom user settings should go.

When you logout, it looks for this file:

~/.bash_logout

file doesn't exist by default. If you want to do something every time you logout, create this file and load it up.