我正在尝试计算给定时间段内的所有击键次数。 目前我的代码如下所示:
$ timeout -s 9 10s xinput test 8 | wc -l
返回
Killed
而不是预期的按键次数。 当我在没有管道的情况下运行超时时,输出符合预期
$ timeout -s 9 20s xinput test 8
key release 36
key press 42
key release 42
key press 26
key release 26
key press 28
key release 28
key press 38
key release 38
key press 46
key release 46
key press 31
key release 31
key press 41
key release 41
key press 26
key release 26
Killed
更改信号或添加参数 --preserve-status 都无法解决此问题。
我想知道为什么这不起作用。 “超时”是否以某种方式劫持了 xinputs stdout?
编辑: 但是添加 --foreground 解决了我的问题。不过我不明白为什么。
最佳答案
之所以有效,是因为这样,timeout 命令不会终止任何子进程,从而避免 wc 获取行数。
$ timeout --foreground -s 15 10s xinput test 8 | wc -l
另一种方式是这样的:
$ xinput test 8 > output.log & sleep 10 && wc -l output.log && kill $!
这样,您就不需要超时。第一部分将 xinput 输出重定向到一个文件并将命令发送到后台,然后休眠(等待文件接收到一些数据),在休眠完成后我们运行 wc 并优雅地终止 xinput 后台命令。
关于linux - 从 'timeout' 到 'wc -l' 的管道输出失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35088906/