[BASH] Pipes bzw. Stdin Umlenkung erkennen [was: noch ne bash script Frage]
-
Hallo,
gibt's ne Möglichkeit wie ich herausfinden kann, OB jemand daten zu meinem script gepiped hat?
Bsp: (soll bash-prompt darstellen)
>./script \\1: nichts gepiped. >echo "blub" | ./script
\1: man hat was gepiped.<edit>
bitte vernünftige Topics benutzen
wmfrs
</edit>
OK.
-
IIRC gibt es eine möglichkeit nachzugucken, ob die Standardeingabe ein Terminal ist oder nicht. Der "Befehl" ls kann ja auch je nach Typ der Standardausgabe sein "Ausgabeverhalten" ändern. Ich denk' mal tcgetattr (oder so) ist dein Freund.
mfg
-
mmh, geht's nich simpler?
ich hab ja nur ein simples bash-script und will dafür nicht gleich ein c-programm schreiben (tcgetattr is ja ne C-Funktion oder hab ich da was übersehen?)...
außerdem check ich nicht ganz wie das dann damit gehen soll; der liest mit der Funktion ja nur die Attribute des Terminals aus; ich will ja wissen ob zu meinem script was gepiped wurde... -> Themaverfehlung
-
jo, in C sollte das nicht schwer sein. Für die Bash fällt mir aber keine Lösung ein.
Theoretisch musst du eben gucken, ob STDIN umgelenkt wurde.
-
kingruedi schrieb:
Theoretisch musst du eben gucken, ob STDIN umgelenkt wurde.
Schlaumeier
Ne im Ernst, ich hab ne mehr oder weniger gute Lösung; naja eher ne Alibilösung
TMP=/tmp/$(date +%N) cat > $TMP & if test -s $TMP; then echo "Yep, gepiped."; else echo "Nö, nix da."; fi killall cat rm $TMP
Prinzip: wenn einer gepiped hat steht in der TMP was drin... um diese auf Inhalt zu testen dient test -s.
is nich das eleganteste aber es funktioniert
EDIT: das killall am Schluss wird gar nicht benötigt; wenn das script beendet wird, wird auch cat beendet...
-
hm, funktioniert irgendwie doch nicht
irgendwie is TMP immer leer...Vorschläge?
-
Guten Tag,
Ich hab ne neue Idee: Das Openbsd Reference Manual sagt zu tty(1) folgendes:
The tty utility writes the name of the terminal attached to standard input to standard output (...) If the standard input is not a terminal, the message ``not a tty'' is written.
Das heisst einfach man muss die Ausgabe von tty auf ``not a tty'' prüfen.
[Nachtrag]
Und wenn man das Manual weiter liest steht da noch was viel erfreulicheres:The tty utility exits 0 if the standard input is a terminal, 1 if the standard input is not a terminal, or >1 if an error occurred.
Ich sollt mir mal angewöhnen Sachen zu Ende zu lesen
[/Nachtrag]Servus
-
Klasse, so funktioniert's!! Dankesehr