Найти каталог USB-устройства / sys / bus / usb / devices / используя idVendor / idProduct

Я пытаюсь создать сценарий, который печатает идентификатор продукта и поставщика с помощью lsusb, а затем проверяет этот идентификатор, чтобы найти каталог устройства USB в /sys/bus/usb/devices.

Сначала я думал, что номер шины и устройства, напечатанный lsusb, будет указывать на соответствующую папку. Например, если Bus = 002 и Device = 002, каталог USB будет /usb/devices/2-2. К сожалению, это оказалось не так.

Я могу вручную найти соответствующую папку, используя эту команду, которую я нашел в другой теме:

for X in /sys/bus/usb/devices/*; do 
    echo "$X"
    cat "$X/idVendor" 2>/dev/null 
    cat "$X/idProduct" 2>/dev/null
    echo
done

Однако мне нужен скрипт, который может автоматизировать поиск этой папки.

4
задан 25 September 2013 в 21:48

2 ответа

Если бы я понял Ваш вопрос, то следующий сценарий должен сделать задание:

#!/bin/bash

if [ $# -ne 2 ];then
  echo "Usage: `basename $0` idVendor idProduct"
  exit 1
fi


for X in /sys/bus/usb/devices/*; do 
    if [ "$1" == "$(cat "$X/idVendor" 2>/dev/null)" -a "$2" == "$(cat "$X/idProduct" 2>/dev/null)" ]
    then
        echo "$X"
    fi
done
4
ответ дан 25 September 2013 в 21:48

Можно на самом деле сделать это немного более простое:

rgrep -l $1 /sys/bus/usb/devices/*/idVendor | sed 's/\(.*\)\/idVendor/\1/' | xargs -iXXX rgrep -l $2 XXX/idProduct | sed 's/\(.*\)\/idProduct/\1/'

можно хотеть сохранить проверку работоспособности хотя, если Вы хотите сохранить это как сценарий:

#!/bin/bash

if [ $# -ne 2 ];then
  echo "Usage: `basename [111]` idVendor idProduct"
  exit 1
fi

rgrep -l ^${1}$ /sys/bus/usb/devices/*/idVendor | sed 's/\(.*\)\/idVendor/\1/' | xargs -iXXX rgrep -l ^${2}$ XXX/idProduct | sed 's/\(.*\)\/idProduct/\1/'
0
ответ дан 1 December 2019 в 09:51

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

Похожие вопросы: