Datum: 2001-03-22
Quelle: suse-linux
Die meisten Linux-Programme machen im Laufe ihrer Entwicklung mehr oder weniger große Erweiterungen in ihrer Funktionalität mit.
Ein Beipiel dafür ist chmod, welches ab einer bestimmten Version den Modus anhand einer Referenzdatei
setzen konnte, ein anderes ist file, das irgendwann mal die Anzeige des Dateinamens unterdrücken
konnte.
Wenn man nun Scripts so anlegen will, dass sie unabhängig von der vorhandenen Programmversion sind, kann man entweder komplett auf
neue Features verzichten oder das wie unten beschrieben lösen. Das Beispiel ist nicht komplett auskodiert, liefert also anhand des
chmod lediglich eine Ahnung davon, wie man vorgehen kann.
Wenn es lediglich um Funktionserweiterungen geht, ist das Vorgehen sicher nur ein Luxus, mit dem man vielleicht ein wenig Performance
herauskitzeln kann, interessant wird die Lösung, wenn Programmversionen inkompatibel zueinander sind.
chmod_v3 () {
src=$1
dst=$2
# stat $src, um den Modus zu bestimmen / stat $src to get the mode
modus=`stat -c "%a" $src`
chmod $modus $dst
}
chmod_v4 () {
src=$1
dst=$2
chmod --reference=$src $dst
}
if `chmod --version | sed "s/.* //g;s/\..*//g"` -lt 4; then
alias chmod_ref=chmod_v3
else
alias chmod_ref=chmod_v4
fi
Dahinter steckt folgende Idee: Man definiert zwei Funktionen chmod_v3 und
chmod_v4, die abhängig von der ermittelten Version des Programms per Alias an den
Aufruf chmod_ref gebunden werden. Im weiteren Code wird dann nur noch
chmod_ref referenz_datei datei_muster benutzt.