Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

adminstorieszentralebashrc2 [20120906 15:50] (aktuell)
Dirk Deimeke angelegt
Zeile 1: Zeile 1:
 +====== Zentrale .bashrc (2) ======
  
 +  * Urspruenglicher Autor: Dirk Deimeke
 +  * Urspruengliches Datum: 07.10.2011
 +
 +Lange ist es her, dass ich den [[http://​adminstories.de/​index.php?/​archives/​24-Zentrale-.bashrc-1.html|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:
 +
 +<code bash>​path_pre_extend=""​
 +path_post_extend=""​
 +library_path_extend=""​
 +man_path_extend="/​usr/​share/​man"</​code>​
 +
 +''​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 [[https://​secure.wikimedia.org/​wikipedia/​de/​wiki/​GNU_Screen|GNU Screen]], das habe ich mir selber kompiliert (''​make --PREFIX=/​home/​dirk/​sscreen_4.0.3''​). Der Pfad wird in den entsprechenden Variablen verewigt:
 +
 +<code bash>​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}"​
 +}</​code>​
 +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 [[http://​selflinux.org/​selflinux/​html/​autofs.html|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, [[https://​www.gnu.org/​software/​grep/​|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 :-)
 +
 +<code bash>​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
 +}</​code>​
 +
 +[[adminstoriesartikel|Zurück zur Uebersicht]]