こんにちは、この行があります。
$ echo $(xinput | grep "TouchPad") SynPS/2 Synaptics TouchPad id=12 [slave pointer (2)]
どういうわけか12を取得して変数に保存できるかどうかを尋ねたい。ありがとうございます。
答え1
device_id=$(xinput | sed -n 's/.*TouchPad.*id=\([0-9]*\).*/\1/p')
バラよりもう一つの答えこれは一般的なイディオムの説明ですsed
。
答え2
デバイスの数値識別子を取得する必要はなく、文字列を直接使用できます。xinput list --name-only | grep Touchpad
「タッチパッド」を含むデバイス名を1行に1つずつ一覧表示するために使用されます。
数字識別子が必要な場合は、xinput list
今度はに再度電話してください--id-only
。
name=$(xinput list --name-only | grep Touchpad)
nl='
'
case "$name" in
*"$nl"*) echo "Multiple touchpad devices found, aborting"; exit 2;;
"") echo "No touchpad device found, aborting"; exit 2;;
esac
id=$(xinput list --id-only "$name")
答え3
コンピュータでこのスクリプト/変数を使用する場合は、デバイス名は常に同じです。だからあなたはできます
$ xinput list --id-only "SynPS/2 Synaptics TouchPad"
#Output:
12
変数に保存するには:
$ var=$(xinput list --id-only "SynPS/2 Synaptics TouchPad")
答え4
最も効率的な方法ではありませんが、簡単な方法は次のとおりです。
deviceid="$(xinput | grep "TouchPad" | grep -oE 'id=[^ ]+' | cut -d= -f2)"
"$deviceid"
その後、スクリプトでこれを参照できます。
どのように機能するかを確認するには、最初に開始したコマンドを使用して解析する入力行を取得します。その後、grep -o
行全体ではなく一致するデータのみを返すを使用するため、-E
構文はよりきれいになります。表現は、/id=[^ ]+/
「a i
、a d
、=
記号、および1つ以上の文字を意味します。いいえスペース。このid=12
ように抽出して送信すると、cut
入力をシンボルに分割するように指示します((for)。=
-d
D12
区切り文字)スイッチ)を選択し、目的の2番目のフィールドを取得します。
これはすべてサブシェルで実行され、その出力は変数値として使用されます。