Недавно я перешел с Ubuntu на OS X и обнаружил, что команда «tail» ведет себя по-другому.
На Ubuntu я мог бы запустить
tail -f xyzzy.log | espeak
(Например, чтобы компьютер прочитал мне, что происходит в IRC.)
Однако в OS X
tail -F xyzzy.log | say
(что, как я ожидал, будет эквивалентно) не дает никакого результата.
Предположительно, это происходит потому, что конвейер хочет отправить полный вывод tail в say, но поскольку tail работает постоянно (с -f), он никогда не достигает конца процесса, и поэтому вывод никогда не передается в say. Честно говоря, если я правильно понимаю, такое поведение имеет больше смысла, чем поведение, которое у меня было в Ubuntu, — оно просто менее полезно.
Так есть ли другой способ достичь того же результата? (И верны ли мои предположения о том, почему это происходит?)
решение1
Видетьhttps://apple.stackexchange.com/questions/9673/how-to-correctly-pipe-output-in-say-in-terminalчто предполагает
tail -f xyzzy.log | while read line ; do echo $line | say ; done