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

88
8

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

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

спросил(а) 2021-01-25T14:04:33+03:00 4 месяца, 2 недели назад
1
Решение
89

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

Для подготовки команды whiptail или dialog, с идентификатором USB как 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.

Это может выглядеть примерно так:

enter image description here

затем

echo $usbdev 
1d6b:0002

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

ответил(а) 2021-01-25T14:04:33+03:00 4 месяца, 2 недели назад
64

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

lsusb | awk '{ print $6 }'

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

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

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

ответил(а) 2021-01-25T14:04:33+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема