私は実行中のトレースブロックを無効にする起動時に実行されるシェルスクリプトを作成しています。で始めてxinput list
パイプで接続しgrep Stick
、そんなものでパイプしなければならないのですがgrep id=
、それでは通常11という2つの数字が出てきます。私が知っている限り、数字は1から18の間ですが、foo=xinput list | grep Stick | grep id=
11にはand fooのようなものを書く必要があります。以下は xinput リストの例です。
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint TouchPad id=10 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint Stick id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
↳ Toshiba input device id=12 [slave keyboard (3)]
↳ TOSHIBA Web Camera - FHD id=13 [slave keyboard (3)]
私が得なければならないのは、Stick行のid =次の数字である11です。
答え1
簡単に言えば、必要なコマンドは次のとおりです。
foo="$(xinput list | grep -F 'Stick' | grep -Po '(?<=id=)\d\d?')"
以下は、より詳細な説明です。
grep
以下を含む正規表現を使用して、必要なことを実行できる必要があります。過去志向の主張。重要な成分は次の式grep
です。
grep -Po '(?<=id=)\d\d?'
これは、1桁または2桁の数字で始まり、後ろに1桁または2桁の数字が続く部分文字列と一致しますが、id=
接頭辞は返さずに数字のみを返しますid=
。
次の方法でこれをテストできます。
echo "id=11" | grep -Po '(?<=id=)\d\d?'
これが11
出力になります。これをコードスニペットに適用すると、次のような結果が得られます。
foo="$(xinput list | grep -F 'Stick' | grep -Po '(?<=id=)\d\d?')"
2番目のテストでサンプルデータをファイルに保存するとしますdata.txt
。
# data.txt
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint TouchPad id=10 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint Stick id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
↳ Toshiba input device id=12 [slave keyboard (3)]
↳ TOSHIBA Web Camera - FHD id=13 [slave keyboard (3)]
次に、次のコマンドを実行します。
cat data.txt | grep -F 'Stick' | grep -Po '(?<=id=)\d\d?'
これが11
出力になります。
答え2
AlpsPS/2 ALPS DualPoint Stick
xinputに割り当てられる
デバイス名(既知の場合)を指定すると、そのデバイスのみが指定され、xinput
次--list
のように範囲を狭めることができます--id-only
。
注文する:
xinput --list --id-only 'AlpsPS/2 ALPS DualPoint Stick'
指定されたデバイスのID値を返します。
11