Ich weiß, dass dies bisher nur unzureichend behandelt wurde, aber diese Antworten sind entweder nicht erklärbar oder gelten nicht.
Grundsätzlich müssen meine Skripte irgendwann überprüfen, ob eine Datei angegeben ist. Wenn dies der Fall war, wird sie später als Eingabe verwendet.
[ -f "$1" ] && TINPUT="$1"
einfach genug ... Wenn nun eine Datei nicht gefunden oder nicht angegeben wurde, hätte ich TINPUT="-"
das, was den späteren Befehl anweisen würde, stdin zu lesen.
Hier ist meine Frage ... Wie kann ich erreichen, dass das Skript fehlerhaft stirbt, wenn es ohne Pipe oder ohne Angabe einer Datei ausgeführt wurde?
Ich verwende dash, die Debian POSIX-kompatible Shell, daher kann ich keine Bashisms verwenden. Ich bevorzuge auch die Verwendung von Listen, ifs
aber die meisten ifs
könnten trotzdem in Listen geschrieben werden.
quelle
|
. Wenn das konkret ist ist nicht möglich, was meiner Meinung nach möglicherweise nicht möglich ist. Es würde auch ausreichen, nach Daten zu suchen. Grundsätzlich möchte ich, dass das Skript endet und sagt: "Skript benötigt einen Dateinamen oder stdin", anstatt nur ewig ohne Ausgabe zu hängen wie es jetzt tut.Antworten:
Sie können testen, ob der Standardeingang ein Terminal ist:
quelle
tty
einen stillen Modus unterstützt :tty -s
anstelle vontty > /dev/null