====== 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:
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 [[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:
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 [[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 :-)
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
}
[[adminstoriesartikel|Zurück zur Uebersicht]]