如何在bash中打破atail -f?因为这个问题和这个问题有关
tail -f | awk and end tail once data is found
我尝试了以下方法:

#! /bin/bash

tvar="testing"
(set -o pipefail && tail -f <<< "$tvar" | awk '{print; exit} END{ exit 1}'  )

但剧本仍在继续

最佳答案

好吧,问题不是tail -f而是挂起的awk。当发现EOF时(用exit 1终止)。但是没有找到EOF;tail -f没有终止,因此没有EOF。
如果awk终止,那么这也会打断管道,tail将接收到一个SIGPIPE(它将终止它)。
你必须找到一个不同的终止条件。
编辑:
要实现您想要的,您可以在后台启动tail -f,记住它的PID,并在不再需要它时立即终止它。在后台运行并同时使用管道是很棘手的。最简单的方法是使用命名管道(FIFO):

mkfifo log.pipe
tail -f log > log.pipe & tail_pid=$!
awk ... < log.pipe
kill $tail_pid
rm log.pipe

关于bash - 如何在bash中破坏tail -f命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20515372/

10-16 13:48