我有一些服务可以在文件中生成日志logs.log
。
我还有一些与此服务交互的其他命令。假设它是一些foo.sh
。
我需要的是在运行logs.log
期间准确地剪切和保存日志。foo.sh
换句话说,当它与我的交互时,我需要这部分服务日志foo.sh
(所以我不关心foo.sh
的日志)。
我希望这个命令能够解决问题,但它会在foo.sh
完成后继续读取文件:
> foo.sh | tail -f logs.log > foo_part.log
有什么好的方法来执行这个技巧吗?
答案1
通过将后台进程发送到后台,这变得相当简单:
foo.sh &
mypid=$!
tail -f /path/to/logs.log > /path/to/partial.log &
tailpid=$!
wait $mypid
kill -TERM $tailpid
$!
捕获发送到后台运行的最后一个作业的 PID,以便我们可以wait
在您的脚本上完成,然后在我们不再需要它时处理该过程kill
。tail
答案2
这个版本也可以做到(我认为):
( tail -f logs.log >foo_part.log &
foo.sh&
wait $! && kill %1 )
请注意,%1 将命中子 shell 中的第一个后台进程