我想编写一个脚本来禁用键盘。我写入xinput disable 13
内置键盘的 id = 13。但是如果 'id' 以某种方式发生变化怎么办?那么它将不再起作用。这就是为什么我必须编写更好的脚本,即使用 grep 的脚本。
现在我明白了
xinput list|grep AT|grep id=
↳ AT Translated Set 2 keyboard id=13 [slave keyboard (3)]
我将其添加cut -f 2
到命令中,因此它显示此 > id=13 因此,目前,我得到了 'id=13',但我只需要 13,而不需要 id=,因此我可以将该值分配给某个变量,并将其传递给xinput disable $variable
有人可以帮我完成我的脚本吗?
答案1
您不必指定数字索引,以下命令就足够了:
xinput --disable 'AT Translated Set 2 keyboard'
请参阅 xinput 手册页以了解更多配方。
如果您想使用 grep 解析 ID,您可以使用以下命令:
$ xinput list | grep -Po 'AT.*id=\K[0-9]+'
13
有关更多详细信息\K
,请参阅grep 是否可以仅输出匹配的指定分组?。
答案2
这应该对你有用。
xinput list|grep AT|grep id=|cut -f 2|cut -f 2 -d =
cut
命令有一个指定分隔符的选项。
xinput list|grep AT|grep id=|cut -f 2
这将为您提供id=13
,因此将其传递给另一个 cut 命令,指定分隔符为 =
样本
~$ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Dell Premium USB Optical Mouse id=10 [slave pointer (2)]
⎜ ↳ DualPoint Stick id=15 [slave pointer (2)]
⎜ ↳ AlpsPS/2 ALPS DualPoint TouchPad id=16 [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)]
↳ Sleep Button id=9 [slave keyboard (3)]
↳ Dell Dell USB Keyboard Hub id=11 [slave keyboard (3)]
↳ Dell Dell USB Keyboard Hub id=12 [slave keyboard (3)]
↳ Laptop_Integrated_Webcam_FHD id=13 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)]
↳ Dell WMI hotkeys id=17 [slave keyboard (3)]
~$ xinput list|grep AT|grep id=|cut -f 2|cut -f 2 -d =
14
答案3
所以你想要一个子字符串?
字符串=$(xinput | grep HID | cut -f 2); 回显 ${字符串:3}
这在 shell 中不起作用,仅在 bash 中起作用
chad@M4A79XTD-EVO:~$ xinput ⎡ 虚拟核心指针id=2[主指针(3)] ⎜ ↳ 虚拟核心 XTEST 指针 id=4 [从属指针 (2)] ⎜ ↳ HID 04b4:0033 id=8 [从属指针 (2)] ⎣ 虚拟核心键盘id=3[主键盘(2)] ↳ 虚拟核心 XTEST 键盘 id=5 [从属键盘 (3)] ↳ 电源按钮 id=6 [从属键盘 (3)] ↳ 电源按钮 id=7 [从属键盘 (3)] ↳ AT 翻译设置 2 键盘 id=9 [从属键盘 (3)] chad@M4A79XTD-EVO:~$ 字符串=$(xinput | grep HID | cut -f 2);echo ${字符串:3} 8
答案4
虽然这个答案很老了,但它让我找到了比以前的答案简单得多的解决方案。按照 Lekensteyn 的建议检查手册页,这就是我发现的。
# Keyboard, TouchPad, Mouse, etc...
DvcName=`xinput list --name-only | grep "QueryYourDevice"`
DvcId=`xinput list --id-only "$DvcName"` # Save Device Id.....
现在您已经存储了设备名称和 ID,并且可以在整个脚本中轻松使用。