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