Оболочка Linux получает идентификатор устройства из пользовательского ввода - PullRequest
0 голосов
/ 28 мая 2018

Я работаю над сценарием установки для программы, для которой нужен идентификатор устройства из lsusb в его конфигурации, поэтому я подумывал сделать следующее:

$usblist=(lsusb)
#put the list into a array for each line.
#use the array to give the user a selection list usinging whiptail.
#from that line strip out the device id and vender id from the selected line.

Извините, я не слишком далеко продвинулсямой код, но я застрял на этом и понятия не имею, как делать то, что я хотел бы сделать.Пожалуйста, может кто-нибудь помочь.Я очень плохо знаком с сценариями оболочки

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Использование whiptail для выбора USB-устройства

Для подготовки whiptail или dialog команды, с USB ID в качестве TAG и описания как item , вы можете создать небольшую вложенную оболочку:

read usbdev < <(
    declare -a array=()
    while read foo{,,,,} id dsc;do
        array+=($id "$dsc")
      done < <(lsusb)
    whiptail --menu 'Select USB device' 20 76 12 "${array[@]}" 2>&1 >/dev/tty
)

Примечание:

  • Переменная $array не существуетза пределами области действия подоболочки.
  • Поскольку $array заполнено ($id "$dsc") и используется "${array[@]}", пробел в описании не нарушит список элементов.
  • синтаксис read foo{,,,} id dscбудет читать вывод lsub по строке, через пробел, отбрасывая 5 первых слов, назначая 6-е слово для id и остаток строки для dsc.

Это может сделать что-то вроде:

enter image description here

Тогда

echo $usbdev 
1d6b:0002

Вы можете найти больше образцов, используя whiptail, dialog и другие способы на Как запросить ввод Да / Нет / Отмена в сценарии оболочки Linux? и Селектор USB-накопителя: USBKeyChooser

0 голосов
/ 29 мая 2018

Чтобы извлечь идентификаторы устройств из lsusb, можно использовать следующую строку:

lsusb | awk '{ print $6 }'

Если вам необходимо сохранить идентификаторы в массиве, используйте следующую строку:

mapfile -t device_ids < <(lsusb | awk '{ print $6 }')

Доступ к первому элементу в массиве device_ids: echo ${device_ids[0]}

...