Login
Newsletter
Werbung

Do, 23. Februar 2017, 15:00

Erst du, dann du, dann du, dann du

Synchronisation von Jobs in der Shell

Probleme und Einschränkungen

Ein Problem gibt es noch, das mit folgendem Aufruf deutlich wird:

01 echo "=====" \
    | in_pipe false \
    | in_pipe sleep 1
02 echo $?

Das Problem wird in der letzten Zeile der Ausgabe offenbar:

=====
Mi 21. Jan 10:09:08 CET 2015
false
-----
-----
RESULT=1
Mi 21. Jan 10:09:08 CET 2015
=====
Mi 21. Jan 10:09:08 CET 2015
sleep 1
-----
-----
RESULT=0
Mi 21. Jan 10:09:09 CET 2015
=====
0

Die Ausgabe zeigt: Obwohl ein Job einen Fehlerwert gemeldet hat, registriert die Shell diesen nicht, weil der letzte Job in der Pipe ohne Fehler endete.

Bei der POSIX- oder Bourne-Shell muss man mit diesem Umstand leben - oder die Ausgabe der Pipe weiter untersuchen. Verwendet man jedoch bash, ksh oder zsh, erscheint folgende Lösungsanweisung im Skript vor der Pipe:

set -o pipefail

Allerdings hat auch diese Lösung Einschränkungen.

  • Pro Job lässt sich nur ein Befehl aufrufen. Immerhin kann man Argumente mitgeben.
  • Da die Ausgabe der Jobs in Variablen zwischenlagert, sollte die Ausgabe sich auf den maximalen Wert für Shell-Variablen beschränken. Wer mehr braucht, muss mit temporären Dateien arbeiten.
  • Keine Ausgabeumleitungen lassen sich an die Funktion durchreichen. Das könnte man allerdings in die Funktion selbst einbauen, wodurch sie für alle Jobs gelten würde.

Wer das im Hinterkopf behält, kann verschiedene Jobs gleichzeitig aufrufen, ohne dass sich aufeinanderfolgende Staffeln von Jobs überlappen oder zwischendurch Zeit zu verschenken.

Autoreninformation

Mathias Weidner studierte Ende der 1980-er Jahre Automatisierungstechnik in Leipzig. Nach verschiedenen Stellen in der Software-Entwicklung arbeitet er als Administrator für Unix/Linux, Netzwerke und Sicherheitsthemen. Seit einiger Zeit schreibt er hin und wieder Bücher dazu, die unter http://buecher.mamawe.net zu finden sind.

Dieser Artikel ist zuerst erschienen in UpTimes, Mitgliederzeitschrift des GUUG e.V., Ausgabe 2016-2. Veröffentlichung mit freundlicher Genehmigung.

  • Das Werk darf vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden, Abwandlungen und Bearbeitungen des Werkes müssen unter den gleichen Bedingungen weitergegeben werden. Der Name des Autors/Rechteinhabers muss in der von ihm festgelegten Weise genannt werden.

    - Weitere Informationen
Kommentare (Insgesamt: 3 || Alle anzeigen )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung