-1

awkの代わりに次のコマンドが機能しないのsedはなぜですか?

su -c "stdbuf -i0 -o0 -e0 od --width=144 -x /dev/input/event3 | sed 's%^\([a-z0-9]\+ \)\{11\}%%;s%\(....\).*%\1%'"

これは、キーを押すたびに、押されたキーのUSBHIDID番号を出力します。

出力例(0028forReturnおよび00e4for Right-Ctrl):

0028
0028
0028
0028
0028
00e4
00e4
00e4

これは、 2回押すと//フィルタリングなしの2 行の出力です。USBHIDID番号は列12にあります。sedcutawkReturn

0000000 2d6f 511e 0000 0000 051b 0007 0000 0000 0004 0004 0028 0007 2d6f 511e 0000 0000 051d 0007 0000 0000 0001 001c 0000 0000 2d6f 511e 0000 0000 051e 0007 0000 0000 0000 0000 0000 0000 2d73 511e 0000 0000 a150 0007 0000 0000 0004 0004 0028 0007 2d73 511e 0000 0000 a153 0007 0000 0000 0001 001c 0001 0000 2d73 511e 0000 0000 a154 0007 0000 0000 0000 0000 0000 0000
0000220 2d73 511e 0000 0000 9b5a 0008 0000 0000 0004 0004 0028 0007 2d73 511e 0000 0000 9b5d 0008 0000 0000 0001 001c 0000 0000 2d73 511e 0000 0000 9b5e 0008 0000 0000 0000 0000 0000 0000 2d74 511e 0000 0000 4f90 0005 0000 0000 0004 0004 0028 0007 2d74 511e 0000 0000 4f93 0005 0000 0000 0001 001c 0001 0000 2d74 511e 0000 0000 4f94 0005 0000 0000 0000 0000 0000 0000

でやってみました

su -c "stdbuf -i0 -o0 -e0 od --width=144 -x /dev/input/event3 | cut -d' ' -f12"

そしてそれも機能します。ただし、次の2回のキー押下後に押されたキーのみが表示されます。stdbufは、標準の入力/出力/エラーストリームのバッファリングを0に調整する必要がありますが、ここでは役に立ちませんでした。

私のmawkコマンドは次のようになりました:

su -c "stdbuf -i0 -o0 -e0 od --width=$((48*3)) -x /dev/input/event3 | mawk '{ print $12 }'"

しかし、それは私にいくつかの2つ、次にいくつかの改行、そして再び2つを示しただけでした。非常に遅い/遅いようです。キーを押しても何も起こりません。異なるキーを複数回押した後、私は常に2と改行の束を取得します。どのキーを押しても!例:

2
2
2
2
2
2
2
2
2
2












2
2

どうすればこれを修正できますか?なぜこれが発生するのですか?

アップデート

gawk代わりに使用すると、mawkこれ以上遅れることはありません(バッファなし)。しかし、キーの例として、0028または00e4などの正しい値がまだ表示されません。ReturnRight-Ctrl

4

1 に答える 1

0

すべてのコメントで、私は解決策にたどり着きました。

@Olivier Dulacは、さまざまなawk実装があるという考えに私を導きました。これにより、遅延の問題が解決されました(のgawk代わりにを使用mawk)。私も必要ありませんstdbuf

@Ed Mortonのアイデアは"、彼の例で引用符を使用したため、私に問題をもたらしました。を使用して実行されたため、ステートメントにはすでに全体の引用符が含まれていますsu。だから私は彼らから逃げなければなりませんでした。

私のステートメント全体は次のようになります(12の前にあるエスケープされたドル記号に注意してください)。

su -c "od --width=144 -x /dev/input/event3 | awk '{ print \$12 }'"

そして今、それは期待通りに動作します。

于 2013-02-15T19:17:30.397 に答える