我想使用 tail 作为标准输入向程序发送文本文件中的最新行。
首先,我向程序回显一些每次都相同的输入,然后从输入文件发送尾部输入,该输入文件应首先通过 sed 处理。以下是我期望工作的命令行。但是当程序运行时,它只接收回显输入,而不接收尾部输入。
(echo "new" && tail -f ~/inputfile 2> /dev/null | sed -n -r 'some regex' && cat) | ./program
但是,以下内容完全按照预期工作,将所有内容打印到终端:
echo "new" && tail -f ~/inputfile 2> /dev/null | sed -n -r 'some regex' && cat
因此,我尝试使用另一种类型的输出,并且在发布回显文本时,尾部文本不会出现在任何地方:
(echo "new" && tail -f ~/inputfile 2> /dev/null | sed -n -r 'some regex') | tee out.txt
这让我认为这是缓冲的问题,但我尝试了unbuffer
计划和所有其他建议在这里(https://superuser.com/questions/59497/writing-tail-f-output-to-another-file https://superuser.com/questions/59497/writing-tail-f-output-to-another-file)没有结果。尾部输出去哪里以及如何让它按预期进入我的程序?
当我在 sed 命令前面添加以下前缀时,缓冲问题得到了解决:
stdbuf -i0 -o0 -e0
比使用 unbuffer 更可取,这对我来说甚至不起作用。 Dave M 建议使用 sed 相对较新的 -u 似乎也能达到目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)