[英]How to break a tail -f command in bash
如何在bash中打断tail -f
? 由于这个问题与这个问题有关
我尝试了以下方法:
#! /bin/bash
tvar="testing"
(set -o pipefail && tail -f <<< "$tvar" | awk '{print; exit} END{ exit 1}' )
但是脚本仍然挂在tail -f
好吧,问题不是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
似乎从使用<<<
切换到echo "$tvar" | tail -f
echo "$tvar" | tail -f
是您想要的吗?
$> cat test.sh
#! /bin/bash
tvar="testing"
(set -o pipefail && echo "$tvar" | tail -f | awk '{print} END{ exit 1}' )
$> ./test.sh
testing
$>
尽管awk之后没有打印任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.