我想做一个tail -F
在文件上,直到匹配模式。我找到了一种使用 awk
的方法,但恕我直言,我的命令不是很干净。问题是我需要由于一些限制,只能在一行中完成。
tail -n +0 -F /tmp/foo | \
awk -W interactive '{if ($1 == "EOF") exit; print} END {system("echo EOF >> /tmp/foo")}'
尾部会阻塞直到 EOF
出现在文件中。它工作得很好。 END 块是强制性的,因为 awk 的 exit
不会立即退出。它使 awk
至 eval
退出前的 END 块。 END 块卡在读取调用上(因为 tail),所以我需要做的最后一件事是在文件中写入另一行以强制 tail 退出。有人知道更好的方法吗?
最佳答案
使用尾部的--pid
option 和 tail 将在 shell 死亡时停止。无需向尾文件中添加额外内容。
sh -c 'tail -n +0 --pid=$$ -f /tmp/foo | { sed "/EOF/ q" && kill $$ ;}'
关于shell - 做一个 tail -F 直到匹配一个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5024357/