Im Script zwischen Cronjob und interaktiv unterscheiden

Das Dilemma: Startet man ein Shellscript per Hand, sollte es möglichst ausführliche Statusmeldungen ausgeben, damit man auch sieht, was gerade passiert und was eventuell schiefgeht…

Läuft das Script später aber automatisch, etwa als cronjob, erzeugt jede Ausgabe (sofern man seine crontab sauber konfiguriert hat…) eine lästige Mail an den Administrator – das sollte also bitte nur bei echten Fehlern passieren.

Behelfen kann man sich natürlich mit einer debug-Variablen, die man je nach Bedarf von Hand ein- oder ausschaltet. Eleganter gehts aber mit dem Befehl tty, der anzeigt, welche Console gerade verwendet wird.

Ist man etwa per SSH eingeloggt, liefert tty zum Beispiel die Ausgabe /dev/pts/3.

In ein bißchen Shell-Code verpackt, sieht das dann so aus:

 

#!/bin/sh

#

# test ob interaktiver Aufruf

#

case `tty` in

/dev/* )

VERBOSE="yes"

;;

* )

VERBOSE=""

;;

esac

#

# eine Ausgabe, nur wenn interaktiv

#

if [[ $VERBOSE ]] ; then

echo "Jetzt sind wir gleich am Ende angelangt"

fi

[ch]

Ähnliche Beiträge