This document describes the files used to set up the appropriate working environment for using the bash shell. They are intensely personal, and anyone reusing this document for their own purposes will also certainly want to modify this document.
Permission is given to reuse this document, provided that the source is acknowledged, and that any changes are noted in the documentation.
The document is in the form of a literate program, and generates all files necessary to maintain the working environment, including a Makefile.
These files have been edited from equivalent tcsh originals, but not all features of that shell have been mirrored in here.
This message gets used in a number of places to ensure that all modifications are focussed through this document.
<edit warning 2.1> =The .bash_profile file is executed automatically by login shells. It has the responsibility to set the path (and other variables), run the .bashrc file (because a login shell doesn't do that automatically), and initialize the prompt with an explicit call to bash-prompt. I also worry about the initial login shell, since that has to do slightly different things (such as setting window title bars, and clearing up when logging out).
".bash_profile" 3.1 =We often need to know in this script whether we are logging in as ajh or as root. This code chunk sets the global variable $user appropriately, or dies.
HOST is the abbreviated form of HOSTNAME, that is, without any domain qualification.
The variables that we set are
The sundry variables are set first, since some of them may be used to set the path variable.
Note that the paths are established in increasing order of precedence, that is, the last paths defined are found first.
The machines ararat, ballarat, bendigo, murtoa, clematis and rainbow are all set in like fashion, as they all run Mac OS X (even tho' murtoa and clematis are Intel Macs).
<set paths on all machines 3.5> =dhcp7-218 was added during my OSP at Swinburne, since that was the hostname automatically generated by the DHCP connection.
<set path for ararat 3.6> =The defaults settings assume that we are on a laptop (ararat, but either no hostname, or foreign hostname), so that we go for the standard Mac OS X settings.
<set paths on all machines 3.22> =Now empty, but kept for future use.
<do root related login things here 3.23> =Set the environment variable RSYNC_RSH, which defines the shell transport for rsync as the secure shell ssh.
<set sundry environment variables 3.25> =dhcp7-218 is the machine id allocated at Swinburne (study leave, 2005). It can be removed post 31 Dec 2005.
<set environment for ciao prolog 3.26> =Currently, only murtoa is set up for ciao prolog
<set env vars for hawthorn 3.27> =Now work out what value to assign to SERVER. This is currently kludged, since there is no direct way of knowing what is at the other end of the wire for remote connections. We assume that at home we are using central, and at work we are using hawthorn.
We pick up whether the DISPLAY variable ends with a non-zero window number. This is used by ssh to indicate a remote server. If DISPLAY does indicate a remote server, we use the value of HOST to select the complementary machine (indy03 for host central, and vice versa) and assign that to SERVER. If DISPLAY indicates a local server, then just use the value of HOST as the value of SERVER.
<set LD LIBRARY PATH environment variable 3.36> =This simple little script ensures that the X initialization and default files point to the right place.
The .bashrc file is read every time a bash shell is started. For interactive shells, we need to set the aliases and the prompt.
".bashrc" 5.1 =I like the prompt to show what directory I'm in, as well as the usual login and machine names. Throw in the history number for good measure. But don't set the prompt command if we are in the primary login shell, since it fouls up the window title and/or prompt.
<bashrc: set the prompt 5.7> =This shell script is because bash does not have the equivalent of cwdcmd that tcsh has. So we set up the PROMPT_COMMAND variable to execute this script, which looks at the current heading, the current directory, and sees whether an explicit repainting of the window title bar is necessary.
This code used to be called from .bash_profile, but key environment variables were not set at this stage. Hence it is now invoked in .bashrc.
<determine if primary login 5.8> =We need to know if we are in the primary login shell. This may be different for various machines, since some may be xdm driven, while others just give a tty login. The outcome of this code is to set the variable LOGINLVL to 0 if we are at the primary login level, 1 otherwise.
The bash-prompt file does cool things like set the window title to the path name of the current directory. It is programmed as a separate executable file, due to bash's idiosyncracies (it can be done as an alias in cshrc).
"bash-p" 5.9 =The following wonderful piece of code is the magic to set the X windows title bar to the host name and directory, in the format HOST:directory for the full window, and HOST:basename for the iconified form.
However, since we cannot enter the character sequence directly, the code must be translated subsequently to include the escape characters. This is done in the Makefile, by translating the temporary file bash-p to bash-prompt.
<set heading 5.10> = {esc}]2;${TITLE}{bel}{esc}]1;${ICON}{bel}This file is responsible for setting environment variables to enable {\TeX} to run. I've made it a separate file, so that it can be sourced from other places as necessary to use {\TeX}.
".texrc" 6.1 =20050725:160750 Removed the TEXFORMATS path to my local formats directory. This is now handled in the ~/lib/texmf directory.
<texrc for hawthorn 6.3> =This file is responsible for setting environment variables to enable SGML and related programs to run. I've made it a separate file, so that it can be sourced from other places as necessary to use SGML.
".sgmlrc" 7.1 =Remove the window heading file for this process, and clean up all the window heading and counting files if we are at the bash shell level.
Kill any rootimage (background image) process.
This section is defined here not so much because it is used by this suite, as because it seems the best place to define what are system wide resources, used in a range of applications. Cut and paste the following definitions as required.
| R=FF | ||||||
|---|---|---|---|---|---|---|
| B=FF | B=CC | B=99 | B=66 | |||
| G=FF | ffffff | <bg-colour-ararat 9.1> = rgb:ff/ff/cc | <bg-colour-quorn 9.2> = rgb:ff/ff/99 |
<bg-colour-murtoa 9.3> = rgb:ff/ff/66
Chunk referenced in 3.39
|
||
| G=CC |
<bg-colour-nexus 9.4> = rgb:ff/cc/ff
Chunk referenced in 9.17
|
<bg-colour-bendigo 9.5> = rgb:ff/cc/cc
Chunk referenced in 3.39
|
<bg-colour-sequoia 9.6> = rgb:ff/cc/99
Chunk referenced in 3.39
|
|||
| G=99 | ff99ff | ff99cc | ff9999 | |||
| R=CC | ||||||
| B=FF | B=CC | B=99 | ||||
| G=FF |
<bg-colour-hawthorn 9.7> = rgb:cc/ff/ff
Chunk referenced in 9.17
|
<bg-colour-ballarat 9.8> = rgb:cc/ff/cc | <bg-colour-rainbow 9.9> = rgb:cc/ff/99 | |||
| G=CC |
<bg-colour-sng 9.10> = rgb:cc/cc/ff
Chunk referenced in 9.17
|
cccccc | cccc99 | |||
| G=99 |
<bg-colour-cerg 9.11> = rgb:cc/99/ff
Chunk referenced in 9.17
|
cc99cc |
<bg-colour-bruce 9.12> = rgb:cc/99/99/
Chunk referenced in 9.17
|
|||
| R=99 | ||||||
| B=FF | B=CC | B=99 | ||||
| G=FF |
<bg-colour-clematis 9.13> = rgb:99/ff/ff
Chunk referenced in 3.39
|
<bg-colour-central 9.14> = rgb:99/ff/cc
Chunk referenced in 9.17
|
<bg-colour-meconopsis 9.15> = rgb:99/ff/99 | |||
| G=CC | 99ccff | 99cccc | 99cc99 | |||
| G=99 | 9999ff | 9999cc | 999999 | |||
| R=66 | ||||||
| B=FF | B=CC | B=99 | ||||
| G=FF |
<bg-colour-redfern 9.16> = rgb:66/ff/99
Chunk referenced in 9.17
|
|||||
| R=33 | ||||||
| B=FF | B=CC | B=99 | ||||
| R=00 | ||||||
| B=FF | B=CC | B=99 | ||||
For reference:
| Hex | Decimal |
|---|---|
| ff | 255 |
| cc | 204 |
| 99 | 153 |
| 66 | 102 |
| 33 | 51 |
| 0 | 0 |
I had to kludge the bash-prompt construction. Since it relies upon two control characters that foul up this literate program, they are represented by the strings {esc} and {bel} respectively in the bash-prompt template file, bash-p (See <set heading >). A sed script in the Makefile trans-esc-bel then does the magic of converting these to the real thing. The definitions of the shell variables e and b allow us to manipulate the otherwise unrepresentable control characters. Each of these is formed by translating a dummy character into the control character.
This was the entry in the Makefile, but it doesn't appear to work.
e=`echo e | tr e '\033'` \
b=`echo b | tr b '\007'` \
sed -e "s/{esc}/$$e/g" -e "s/{bel}/$$b/g" bash-p >bash-prompt
| File Name | Defined in |
|---|---|
| .bash_logout | 8.1 |
| .bash_profile | 3.1 |
| .bashrc | 5.1 |
| .sgmlrc | 7.1 |
| .texrc | 6.1 |
| Makefile | 10.1 |
| bash-p | 5.9 |
| setmachine | 4.1 |
| Chunk Name | Defined in | Used in |
|---|---|---|
| bash: set variables | 3.4 | 3.1 |
| bashrc: set the prompt | 5.7 | 5.1 |
| bashrc: setup aliases | 5.2 | 5.1 |
| bg-colour-ararat | 9.1 | 3.39, 9.17 |
| bg-colour-ballarat | 9.8 | 3.39, 9.17 |
| bg-colour-bendigo | 9.5 | 3.39 |
| bg-colour-bruce | 9.12 | 9.17 |
| bg-colour-central | 9.14 | 9.17 |
| bg-colour-cerg | 9.11 | 9.17 |
| bg-colour-clematis | 9.13 | 3.39 |
| bg-colour-hawthorn | 9.7 | 9.17 |
| bg-colour-meconopsis | 9.15 | |
| bg-colour-murtoa | 9.3 | 3.39 |
| bg-colour-nexus | 9.4 | 9.17 |
| bg-colour-quorn | 9.2 | |
| bg-colour-rainbow | 9.9 | 3.39, 9.17 |
| bg-colour-redfern | 9.16 | 9.17 |
| bg-colour-sequoia | 9.6 | 3.39 |
| bg-colour-sng | 9.10 | 9.17 |
| colours | 9.17 | |
| current date | .2 | |
| current version | .1 | |
| determine if primary login | 5.8 | 5.1 |
| determine where we are | 3.3 | 3.1, 5.1 |
| determine who we are | 3.2 | 3.1 |
| do non-root related login things here | 3.24 | 3.4 |
| do root related login things here | 3.23 | 3.4 |
| set LD LIBRARY PATH environment variable | 3.36 | 3.25 |
| set MANPATH environment variable | 3.37 | 3.25 |
| set SERVER environment variable | 3.35 | 3.25 |
| set XMLLIB environment variable | 3.38 | 3.25 |
| set background colour | 3.39 | 3.4 |
| set common path for MacOSX systems | 3.19 | 3.6, 3.7, 3.8, 3.10, 3.12, 3.13, 3.15, 3.21 |
| set common path for central and hawthorn | 3.20 | 3.9, 3.11, 3.17 |
| set env vars for CVS on MacOSX systems | 3.34 | 3.30 |
| set env vars for CVS on hawthorn | 3.33 | 3.27 |
| set env vars for MacOSX | 3.30 | 3.25, 3.25, 3.25, 3.25 |
| set env vars for central | 3.28 | |
| set env vars for hawthorn | 3.27 | 3.25 |
| set env vars for sequoia | 3.29 | 3.25 |
| set env vars for sng | 3.31 | 3.25 |
| set environment for ciao prolog | 3.26 | 3.25 |
| set heading | 5.10 | 5.9 |
| set path for ararat | 3.6 | 3.5 |
| set path for ballarat | 3.7 | 3.5 |
| set path for bendigo | 3.8 | 3.5 |
| set path for central | 3.9 | 3.5 |
| set path for clematis | 3.10 | 3.5 |
| set path for defaults | 3.21 | 3.5 |
| set path for hawthorn | 3.11 | 3.5 |
| set path for meconopsis | 3.12 | 3.5 |
| set path for murtoa | 3.13 | 3.5 |
| set path for nexus | 3.14 | 3.5, 3.5, 3.5 |
| set path for quorn | 3.15 | 3.5 |
| set path for rainbow | 3.16 | 3.5 |
| set path for sequoia | 3.17 | 3.5 |
| set path for sng | 3.18 | 3.5 |
| set paths on all machines | 3.5, 3.22 | 3.4 |
| set paths on all machines | 3.5, 3.22 | 3.4 |
| set sundry environment variables | 3.25 | 3.4 |
| set the perl library for MacOSX systems | 3.32 | 3.30 |
| specific aliases for hawthorn | 5.3 | 5.2 |
| specific aliases for macosx | 5.6 | 5.2 |
| specific aliases for nexus | 5.5 | 5.2 |
| specific aliases for sequoia | 5.4 | 5.2 |
| texrc for MacOSX | 6.2 | 6.1 |
| texrc for hawthorn | 6.3 | 6.1 |
| texrc for sequoia | 6.4 | 6.1 |
| Identifier | Defined in | Used in |
|---|
| 15 Dec 1998 | John Hurst | 1.0 | first version to get a version number! |
| 13 Jan 1999 | John Hurst | 1.0.1 | add RSYNC_RSH enviro. .bash_profilenment variable |
| 21 Mar 1999 | John Hurst | 1.0.2 | revise LOGINLVL stuff |
| 02 Jun 1999 | John Hurst | 1.1 | add environment variable SERVER to indicate which X server we have |
| 07 Jun 1999 | John Hurst | 1.1.1 | create file .bash_profile, rather than .profile |
| 16 Jun 1999 | John Hurst | 1.1.2 | add /usr/etc to PATH on indy03 |
| 22 Jun 1999 | John Hurst | 1.2 | change to Gnome |
| 23 Jun 1999 | John Hurst | 1.2.1 | for just hawthorn |
| 24 Jun 1999 | John Hurst | 1.2.2 | hawthorn fine tunings |
| 15 Jul 1999 | John Hurst | 1.3 | add .xsession make generator for indy03 |
| 03 Aug 1999 | John Hurst | 1.3.1 | add Star Office link on hawthorn |
| 16 Aug 1999 | John Hurst | 1.3.2 | change RSYNC_RSH back to ssh |
| 23 Aug 1999 | John Hurst | 1.3.3 | revise LOGINLVL stuff (again)! |
| 24 Aug 1999 | John Hurst | 1.3.4 | add jade to PATH |
| 20 Sep 1999 | John Hurst | 1.3.5 | add jadetex to TEXINPUTS, ASSOCDB |
| 23 Sep 1999 | John Hurst | 1.3.6 | start an xterm in .xinitrc |
| 27 Sep 1999 | John Hurst | 1.3.7 | updates for changed indy03 |
| 12 Dec 1999 | John Hurst | 1.3.8 | PATH and libraries for XML4C2 |
| 14 Dec 1999 | John Hurst | 1.3.9 | add XMLLIB environment variable |
| 13 Feb 2000 | John Hurst | 1.4.0 | switch to xlp processing, and remove indy03 references |
| 24 Jun 2000 | John Hurst | 1.4.1 | revise use of horizontal rules |
| 17 Aug 2000 | John Hurst | 1.4.2 | add new central (called junee) |
| 19 Aug 2000 | John Hurst | 1.4.3 | substantial revisions to bring into line with junee |
| 07 Sep 2000 | John Hurst | 1.4.4 | revision icon title of xterm |
| 24 May 2001 | John Hurst | 1.4.5 | (forgot to fill this in!) |
| 21 Jun 2001 | John Hurst | 1.4.6 | remove startup msgs for .bash_profile, .bashrc |
| 06 May 2002 | John Hurst | 1.4.7 | revise \$PATH |
| 09 May 2002 | John Hurst | 1.4.8 | add upload and sync-common, revise \$LOGINLVL setup |
| 21 Jan 2003 | John Hurst | 1.4.9 | add machine colours |
| 20030316:111816 | John Hurst | 1.4.10 | extend and revise machine colours |
| 20040124:164708 | John Hurst | 1.4.11 | remove junee and add meconopsis |
| 20040313:174404 | ajh | 1.4.12 | add colons at end of .texrc initialisations |
| 20040609:094845 | ajh | 1.4.13 | remove window numbering stuff as obsolete |
| 20040904:121839 | ajh | 1.4.14 | add rainbow to list of hosts |
| 20050408:104809 | ajh | 1.4.15 | Add BALLARAT environment variable |
| 20050409:140618 | ajh | 1.4.16 | Add ARARAT environment variable |
| 20050504:102025 | ajh | 1.4.17 | move BALLARAT ARARAT settings to separate file |
| 20050725:131418 | ajh | 1.4.18 | add setup for dhcp7-218 (Swinburne). Fixed .texrc error with new texmf structure. |
| 20060410:094906 | ajh | 1.4.19 | added new laptop murtoa (MacBook Pro) |
| 20061209:115828 | ajh | 1.5.0 | add ajh.id.au/njhurst.com/sequoia machine |
| 20070417:154051 | ajh | 1.5.1 | add clematis machine |
| 20070417:163223 | ajh | mdfer6@student.monash.edu1.5.2 | cleaned up some obsolete code (.xinitrc, etc.) |
| 20080305:084924 | mdfer6@student.monash.eduajh | 1.5.3 | added bsit-roaming site |
| 20080312:092253 | ajh | 1.5.4 | revised dyn- hostnames to not include any IP component |