Das Skript Bash kann bei interaktiver Ausführung oder über Cron keinen Unterschied zwischen $PS1 und $- ermitteln.

Das Skript Bash kann bei interaktiver Ausführung oder über Cron keinen Unterschied zwischen $PS1 und $- ermitteln.

Ich möchte, dass meine Cron-Skripte ausführlich ausgeführt werden, wenn sie interaktiv von einem Systembenutzer ausgeführt werden (beispielsweise zu Debugzwecken) und andernfalls still (für Cron, da ich genau dann E-Mails erhalten möchte, wenn Fehler auftreten).

Ich habe Folgendes in meinem Skript ausprobiert:

case "$-" in
*i*) echo "this shell is interactive" > /tmp/log;
*) echo "this shell isn't" > /tmp/log;
esac

aber selbst wenn es interaktiv ausgeführt wird (/bin/bash /tmp/my_script.sh), gibt es immer "diese Shell ist nicht" zurück und

echo $-

im Shell-Skript wird hB und nicht hiB zurückgegeben.

Ich habe auch versucht

if [ -z $PS1 ]

dachte, dass $PS1 bei cron nicht gesetzt ist, aber nochmals, von der Eingabeaufforderung aus gibt echo $PS1 diese Variable zurück, und interaktiv in einem Skript gibt es nichts zurück :/

Ich würde gerne wissen, warum dies interaktiv (/bin/bash my_script.sh) weder den i-Wert für $- noch den Wert von $PS1 zurückgibt.

Vielen Dank für deine Hilfe!

Antwort1

Sie könntenÜberprüfen Sie, ob Stdin ein TTY ist.

Alternativ können Sie Ihrem Skript ein Flag hinzufügen, das es anweist, ruhig oder ausführlich zu sein, anstatt es raten zu lassen.

Antwort2

Sie könnten in Cron eine Umgebungsvariable festlegen und dies überprüfen.

Setzen Sie THISISCRON=1 in einer eigenen Zeile über dem Cron-Eintrag.

Antwort3

Bash-Skripte haben nie die interaktive Option aktiviert. Sie sind überall nicht interaktiv.

verwandte Informationen