出力待機中:xinputテストをgrepに送信すると、予期しない動作が発生します。

出力待機中:xinputテストをgrepに送信すると、予期しない動作が発生します。

後ろに

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

期待どおりに二度目に戻ってきたが、何も起こらなかった。 2番目の収益を明らかにした後、私は次のような結果を得ます。

key release 36

プログラムはすぐにシャットダウンしたいのですが、シャットダウン前にShiftが機能していても、追加のキーストロークを待ちます。私はこれがxinputに追加の行を生成させると思いますが、なぜこれが必要なのかわかりません。 grepはすでに探していた行を見つけました。では、今やめるのはどうですか?

PS。答えが正しいようで、次のようにして目的の結果を得ることができました。

% 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

関連情報