Eingabeaufforderungen sind nur sinnvoll, wenn die Shell interaktiv ist. (Sie möchten nicht, dass sie zB SFTP-Verbindungen stören ...) Um die Interaktivität zu prüfen, haben Sie zwei Möglichkeiten:
Testen Sie, ob
$-
der Brief enthalten isti
.case $- in *i*) <do your prompts>;; *) return;; esac
Oder:
if ! case $- in *i*) false; esac; then <do your prompting> fi
Verwenden
[ -t 0 ]
zu testen, ob stdin (Dateideskriptor # 0) ist ein Terminal:if [ ! -t 0 ]; then return fi
Oder:
if test -t 0; then <do prompts here> fi
(Da Ihr Skript von einem übergeordneten Skript "bezogen" wird, ist der Aufruf return
außerhalb von Funktionen zulässig und kehrt zum übergeordneten Skript zurück. Dadurch können Sie eine zusätzliche Ebene der Einrückung vermeiden.)
Die zweite Methode (prüft stdin) testet die Interaktivität nicht wirklich - beispielsweise sh -l -c "some command"
würde sie den Test auch bestehen, wenn sie durch ein Terminal läuft. In vielen Fällen funktioniert es jedoch trotzdem, da Diensten und SFTP-Verbindungen kein Terminal zugeordnet ist.