Zentrale .bashrc (2)

Lange ist es her, dass ich den ersten Teil geschrieben habe, jetzt ist es einmal Zeit fuer den zweiten Teil. Eine der Herausforderungen bei der zentralen .bashrc ist, dass die Pfade, die in der PATH-Variable zu finden sind, nicht auf jedem System zur Verfuegung stehen. Da das Suchen in nicht vorhandenen Pfaden Zeit benoetigt, habe ich mir das Folgende einfallen lassen.

In der Funktion set_variables aus Teil 1 definiere ich noch zusätzlich die Variablen:

path_pre_extend=""
path_post_extend=""
library_path_extend=""
man_path_extend="/usr/share/man"

path_pre_extend enthaelt Pfade, die am Anfang der PATH-Variable eingefuegt werden sollen, analog dazu path_post_extend fuer Pfade, die am Ende eingefuegt werden sollen. In library_path_extend und in man_path_extend stehen die Pfade, die die Variablen LD_LIBRARY_PATH fuer Bibliotheken und MANPATH fuer man-Pages ergaenzen sollen.

Auf unseren Solaris-Maschinen ist beispielsweise kein GNU Screen, das habe ich mir selber kompiliert (make –PREFIX=/home/dirk/sscreen_4.0.3). Der Pfad wird in den entsprechenden Variablen verewigt:

function set_variables () {
        path_pre_extend=""
        path_post_extend=""
        library_path_extend=""
        man_path_extend="/usr/share/man"
        case "`uname`" in
                "Linux")
                                echo "Nichts zu tun"
                                ;;
                "SunOS")
                                path_post_extend="${path_post_extend} ${HOME}/sscreen_4.0.3/bin"
                                man_path_extend="${man_path_extend} ${HOME}/sscreen_4.0.3/man"
                                ;;
        esac
        path_pre_extend="${HOME}/bin ${path_pre_extend}"
        path_post_extend="${path_post_extend}"
}

Andere Funktionen meiner .bashrc ergaenzen die Pfade ebenfalls. Ich habe nur dieses einfache Beispiel herausgegriffen. Die nachfolgenden Funktionen fuegen einen Pfad nur dann hinzu, wenn der Pfad auf dem Rechner auch existiert.

Ich mache das bewusst mit cd, da wir Automount bzw. Autofs einsetzen. Ich werde darueber noch einmal einen separaten Artikel verfassen, momentan nur so viel: automount haengt ein Verzeichnis erst ein, wenn man mit einem cd dorthin wechselt und haengt es wieder aus, wenn es eine Zeit lang nicht mehr gebraucht wird (keine Datei auf dem Dateisystem in Benutzung ist). Das hilft insbesondere die Last auf NFS-Servern zu verringern.

Der grep-Befehl aus den GNU Utilities, grep, versteht auch den Parameter -q, mit dem man sich die Ausgabeumlenkung spart, grep unter Solaris kennt die Option leider nicht.

Die Schleife geht alle Pfade durch, schaut, dass sie noch nicht in der Hauptvariable vorkommen sind und prueft, ob sie gueltig sind. Wenn das der Fall ist wird entsprechend ergaenzt, sonst nicht. Wie auch sonst, muss ein besonderes Augenmerk auf Pfade mit Leerzeichen gelegt werden, am besten man vermeidet sie komplett, das gibt nur Aerger :-)

function extend_path () {
        for i in $path_pre_extend
        do
                if ! echo $PATH | grep $i >/dev/null
                then
                        if cd $i >/dev/null 2>&1
                        then
                                cd - >/dev/null 2>&1
                                PATH=${i}:${PATH}
                        fi
                fi
        done
 
        for i in $path_post_extend
        do
                if ! echo $PATH | grep $i >/dev/null
                then
                        if cd $i >/dev/null 2>&1
                        then
                                cd - >/dev/null 2>&1
                                PATH=${PATH}:${i}
                        fi
                fi
        done
        export PATH
}
 
function extend_library_path () {
        for i in $library_path_extend
        do
                if ! echo $LD_LIBRARY_PATH | grep $i >/dev/null
                then
                        if cd $i >/dev/null 2>&1
                        then
                                cd - >/dev/null 2>&1
                                LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${i}
                        fi
                fi
        done
        export LD_LIBRARY_PATH
}
 
function extend_man_path () {
        for i in $man_path_extend
        do
                if ! echo $MANPATH | grep $i >/dev/null
                then
                        if cd $i >/dev/null 2>&1
                        then
                                cd - >/dev/null 2>&1
                                MANPATH=${MANPATH}:${i}
                        fi
                fi
        done
        export MANPATH
}

Zurück zur Uebersicht