我正在尝试编写一个脚本,获取使用 打印的产品和供应商 ID lsusb
,然后根据此 ID 查找 中的 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
但是,我需要一个可以自动找到该文件夹的脚本。
答案1
如果我理解了你的问题,那么以下脚本应该可以完成这项工作:
#!/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
答案2
实际上你可以做得更简单一些:
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 $0` 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/'