等待输出:将 xinput test 传输到 grep 时出现意外行为

等待输出:将 xinput test 传输到 grep 时出现意外行为

% xkbset -repeatkeys
% xinput test 14 | grep -m 1 "key release 36"

并保持第二次返回,正如预期的那样,没有任何反应。释放第二次返回后,我得到

key release 36

现在我希望程序立即退出,但它会等待额外的按键——甚至 Shift 也能工作——然后再退出。我想这使得 xinput 产生一条额外的行,但我不明白为什么这是必要的——grep 已经找到了它正在寻找的行。那么为什么不立即退出呢?

附言。答案似乎是正确的,我能够通过这样做得到想要的结果

% xinput test 14 | { grep -m 1 "key release 36" && killall xinput ; }

答案1

grep可能会在第一场比赛后退出。它xinput仍在运行:它只在下次尝试输出内容时注意到管道已关闭。

例如,这里只有第一个 pgrep 找到正在运行的grep进程,但左侧的睡眠仍然发生。

$ ( pgrep grep >&2; echo xxx; pgrep grep >&2; sleep 3; echo yyy ) |grep -m1 xxx
29149
xxx

相关内容