Ich bin vor Kurzem von Ubuntu auf OS X umgestiegen und stelle fest, dass sich der Befehl „tail“ anders verhält.
Unter Ubuntu konnte ich
tail -f xyzzy.log | espeak
(Damit mir der Computer beispielsweise vorliest, was im IRC passiert.)
Unter OS X
tail -F xyzzy.log | say
(von dem ich erwartet hatte, dass es gleichwertig ist) führt zu keinem Ergebnis.
Dies liegt vermutlich daran, dass die Pipe die komplette Ausgabe von tail an say senden möchte, aber da tail ständig läuft (mit -f), erreicht es nie das Ende des Prozesses und die Ausgabe wird daher nie an say übergeben. Ehrlich gesagt, wenn ich das richtig verstehe, macht dieses Verhalten mehr Sinn als das Verhalten, das ich unter Ubuntu hatte – es ist nur weniger nützlich.
Gibt es also eine andere Möglichkeit, dasselbe Ergebnis zu erzielen? (Und sind meine Vermutungen, warum dies geschieht, richtig?)
Antwort1
Sehenhttps://apple.stackexchange.com/questions/9673/wie-man-output-input-in-say-in-terminal-korrekt-pipettiertwas nahelegt,
tail -f xyzzy.log | while read line ; do echo $line | say ; done