#!/bin/bash # # invoked # . getDevNodes.sh && getDevNodes "" "" 9588 9899 # getDevNodes() { if [ -n "$1" ] && [ "$1" != "no_class" ]; then 2>/dev/null find -L /sys/class/$1 -maxdepth 2 -mindepth 2 -name uevent -exec realpath "{}" + else find /sys/devices -name uevent fi | { if [ -z "$1" ]; then readarray -t lines < <(find /sys/class -maxdepth 2 -mindepth 2 -type l -print -exec realpath "{}" +) local -i count=${#lines[@]} sys_dev=count/2 sys_class=0 local -A classes while [ $sys_dev -lt $count ]; do class="${lines[$sys_class]#/*/*/}" class="${class%/*}" classes["${lines[$sys_dev]}"]="$class" sys_dev+=1 sys_class+=1 done fi readarray -t uevents for u in "${uevents[@]}"; do DEVNAME=; DEVTYPE=no_type; while IFS="=" read key value; do { [ "$key" = "DEVNAME" ] && DEVNAME=/dev/"$value" } || { [ "$key" = "DEVTYPE" ] && DEVTYPE="$value" }; done < "$u" if [ -n "$DEVNAME" ]; then path="${u%/uevent}" while [ "$path" != "/sys/devices" ] && ! [ -f "$path"/idVendor ]; do path="${path%/*}" done [ "$path" != "/sys/devices" ] && { read readIdVendor < "$path"/idVendor read readIdProduct < "$path"/idProduct } || { readIdVendor=---- readIdProduct=---- } echo "${1:-${classes[${u%/uevent}]:-no_class}}" "$DEVTYPE" "$readIdVendor" "$readIdProduct" "$DEVNAME" fi done } | grep "^${1:-[[:graph:]]\+} ${2:-[[:graph:]]\+} ${3:-....} ${4:-....}" | cat }