Оболочка Linux получает идентификатор устройства из пользовательского ввода

Я работаю над сценарием установки для программы, в конфигурации которой требуется идентификатор устройства из 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 ответа

С помощью whiptail для выбора USB-устройства

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

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
)

Nota:

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

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

затем

echo $usbdev 
1d6b:0002

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

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

lsusb | awk '{ print $6 }'

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

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

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

Другие вопросы по тегам