我最近从 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-into-say-in-terminal这表明
tail -f xyzzy.log | while read line ; do echo $line | say ; done