Я хотел бы написать скрипт для отключения клавиатуры. Я пишу 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
Может ли кто-нибудь помочь мне завершить мой сценарий?
Вам не нужно указывать числовой индекс, достаточно следующих команд:
xinput --disable 'AT Translated Set 2 keyboard'
Посмотрите страницу справочника xinput для получения дополнительных рецептов.
Если вы хотите проанализировать идентификатор с помощью grep, вы можете использовать следующее:
$ xinput list | grep -Po 'AT.*id=\K[0-9]+'
13
Для получения дополнительной информации о \K
см. . Может ли grep выводить только указанные группы, которые матч? .
Это должно сработать для вас.
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
, поэтому передайте его другой команде вырезания, указав разделитель как =
Пример
~$ 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
Итак, вы хотите подстроку?
string=$(xinput | grep HID | cut -f 2); echo ${string:3}
Это не работает в оболочке только в bash
chad@M4A79XTD-EVO:~$ xinput ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ HID 04b4:0033 id=8 [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)] ↳ Power Button id=7 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)] chad@M4A79XTD-EVO:~$ string=$(xinput | grep HID | cut -f 2);echo ${string:3} 8
Даже если вы можете использовать grep для этого, я думаю, вам лучше использовать sed здесь:
xinput list | sed -nr 's/.*AT.*keyboard.*id=([0-9]*).*/\1/p'
Хотя это старо, это привело меня к моему решению, которое намного проще, чем предыдущие ответы. Проверка справочных страниц, как предложил Лекенштейн, и вот что я нашел.
# Keyboard, TouchPad, Mouse, etc...
DvcName=`xinput list --name-only | grep "QueryYourDevice"`
DvcId=`xinput list --id-only "$DvcName"` # Save Device Id.....
Теперь у вас есть как имя устройства, так и идентификатор, и вы можете легко использовать его в скрипте.