Programme versionsabhängig starten

Datum: 2001-03-22
Quelle: suse-linux

Worum ging es?

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.

Code
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
Beschreibung

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.