Я пытаюсь создать сценарий, который печатает идентификатор продукта и поставщика с помощью 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
Однако мне нужен скрипт, который может автоматизировать поиск этой папки.
Если бы я понял Ваш вопрос, то следующий сценарий должен сделать задание:
#!/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
Можно на самом деле сделать это немного более простое:
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/'