Оболочка 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]}