BASH: Interaktive Shell erkennen

Für einige Bash-Scripts ist es wichtig, zu erkennen ob das Script manuell durch einen Nutzer gestartet wird oder ob es im Hintergrund ausgeführt wird (z.B. durch Cron). Während ich von Cron nur über Fehler benachrichtigt werden will, empfinde ich Statusmeldungen bei einem manuell ausgeführten Script durchaus als angenehm.

Mit ein paar wenigen Zeilen Code kann man am Anfang eines Scripts prüfen, ob die Shell interaktiv ausgeführt wird. Das Funktioniert sowohl bei BASH, als auch bei SH:

if [ -z "$PS1" ]; then
    echo This shell is not interactive.
else
    echo This shell is interactive.
fi

Ein gutes Beispiel ist ein Mirror-Script per RSync. Wird das Script händisch gestartet, zeigt es diverse Statusmeldungen und menschenlesbare Zahlen an. Wird das Script dagegen in regelmäßigen Abständen durch Cron gestartet, unterbleiben Statusmeldungen, sodass Cron mir nur bei Fehlern eine E-Mail sendet:

#!/bin/sh
OPTS="-rlKHtSz --delete --safe-links --delay-updates --chown=nobody:nogroup"
if [ -z "$PS1" ]; then
    OPTS="$OPTS -q --no-motd"
else
    OPTS="$OPTS -vhi --progress"
fi
rsync $OPTS rsync.apache.org::apache-dist /var/ftp/pub/apache

Ähnliche Artikel

Comments

Leave a Comment