如何在Bash中使用`timeout`命令和`tail`命令?

3

我正在尝试输出一个脚本的最后几行,但也想在5秒后截断它。我可以轻松地输出前面几行。

timeout 5 ./code-c|head

4 (11 - 7) 0.000003s
6 (19 - 13) 0.000018s
8 (37 - 29) 0.000020s
14 (73 - 59) 0.000022s
24 (137 - 113) 0.000024s
30 (227 - 197) 0.000031s
32 (433 - 401) 0.000038s
48 (557 - 509) 0.000044s
50 (769 - 719) 0.000051s
54 (1283 - 1229) 0.000065s

但是如果我尝试

timeout 5 ./code-c|tail

我刚刚获得了

Terminated

这该怎么做才是正确的呢?


1
可能不是“正确”的方法,但您可以使用循环while timeout 5 ./code-c;do :;done | tail - 123
1
@123 这真的起作用了!谢谢。 - Simd
1个回答

4
问题在于,当代码-c以非零退出状态终止时,管道会关闭。添加一个成功的命令以防止这种情况发生。
(timeout 5 ./code-c || true ) | tail

或者

(timeout 5 ./code-c || : ) | tail

那非常聪明!谢谢。 - Simd
1
@eleanora:实际上是一个仅返回 true 并且不执行其他操作的命令。 - 123
我还发现了命令timed-runtimed-run 5 ./code-c |tail 运行得非常好。 - Simd
用于查看 k8s 应用程序日志。kubectl exec webapp -- timeout -t 20 tail -f /log/app.log - Pieter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接