gpt4 book ai didi

bash - 在 bash 中,如何跟踪当前正在写入的 fifo,然后再次跟踪 fifo,寻找不同的文本?

转载 作者:行者123 更新时间:2023-12-05 02:24:03 26 4
gpt4 key购买 nike

我有一个写入标准输出的进程,我希望能够在运行 tail -f 时通过 grepping 查找各种字符串来监视输出。执行此操作的一种方法是写入一个普通文件,然后对文件进行尾部搜索一个字符串,然后对另一个字符串进行尾部搜索。但是,我不想写入文件,因为这会填满磁盘,而且我不想处理旋转日志文件的麻烦。

我认为我可以使用 fifos 实现这一点。例如,

mkfifo myfifo
foo > myfifo &
tail -f myfifo | grep bar
tail -f myfifo | grep baz

不幸的是,这似乎不起作用。事实上,当我第一次执行 tail -f myfifo 然后执行 foo > mfifo 时,我看到任何输出的唯一方法是,但我不想重新启动 foo (这就是重点,否则我可以直接 grep standard out 并重新启动进程以 grep 获取不同的字符串)。有谁知道为什么会发生这种情况或对如何实现这一目标有建议?

最佳答案

发生这种情况是因为 fifo is a data stream .一旦从 FIFO 中读取了一条数据,它就会从 FIFO 中移除。在你的例子中,存储在 myfifo 中的 foo 的输出被 grep 的第一个 tail -f 读取>s 表示“bar”,第二个 tail -f 不留任何内容。

但是您根本不需要将 foo 的输出发送到文件(FIFO 或其他方式)。您可以只发送其输出 directly into tee and have it send that output to as many processes as you want .例如:

$ foo | tee >(grep -o bar) >(grep -o baz) >/dev/null

或者,如果您只是使用 grep,您可以在输出中多次使用 -e:

$ foo | grep -e bar -e baz

关于bash - 在 bash 中,如何跟踪当前正在写入的 fifo,然后再次跟踪 fifo,寻找不同的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16090747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com