Shellskripte aus der Stümper-Liga – Folge 21: Richtige und falsche Optionen
Bash Bashing
Bernhard Bablok
Viele Kommandozeilentools sind überreich mit Optionen gesegnet – die meisten fristen ein Schattendasein. Um effiziente und robuste Skripte zu verfassen, lohnt es, einige ins Licht zu zerren.
Das erste Beispiel mit Verbesserungspotenzial erfordert keine weite Reise: Im Perl-Snapshot "Schicker Umzug" [1] verwendet Michael Schilli folgenden Ausdruck, der so oder ähnlich in vielen Skripten vorkommt:
find . -type f -exec grep Suchstring {}/dev/null \;
Der Nachteil des Konstrukts: Für jede gefundene Datei erzeugt das Betriebssystem per Fork einen neuen Prozess. Jeder eingeloggte User, der auf diese Weise ein ganzes Dateisystem durchsucht, flutet den Host mit sehr vielen, nur kurz laufenden Prozessen.
Dabei zeigt ein Blick in die Manpage von Grep, dass der User für die Verzeichnisrekursion auch ohne »find«
auskommt: Mit einer der Optionen »-r«
, »-R«
, »--recursive«
oder »--directories=recurse«
durchsucht Grep die als Argument übergebenen Verzeichnisse rekursiv. In diesem Fall entsteht für alle Dateien nur ein Prozess:
[...]
Das Linux-Magazin Online veröffentlicht erstmals alle Print-Artikel,
die in den vergangenen sechs Jahren im Linux-Magazin erschienen sind.
Damit steht Ihnen ein hochwertig bestücktes Archiv bis hin zu den Beiträgen
der aktuellen Ausgabe online zur Verfügung. Die über 1200 Artikel sind
größtenteils kostenlos zugänglich, nur für Beiträge (als PDF) der
jüngsten zehn Linux-Magazine ist eine Gebühr von jeweils 99 Cent fällig.
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.