Je ne suis pas tout à fait certain de ce que vous demandez. Vous mentionnez 'port' plusieurs fois, mais dans votre exemple, vous indiquez que la réponse est /dev/ttyUSB0
: il s'agit d'un chemin de développement de périphérique et non d'un port. Donc, cette réponse concerne la recherche du chemin de développement pour chaque périphérique.
Vous trouverez ci-dessous un script rapide et malpropre qui parcourt les périphériques à la /sys
recherche de périphériques USB dotés d'un ID_SERIAL
attribut. Généralement, seuls les vrais périphériques USB auront cet attribut et nous pouvons donc filtrer avec. Si nous ne le faisons pas, vous verrez beaucoup de choses dans la liste qui ne sont pas des périphériques physiques.
#!/bin/bash
for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do
(
syspath="${sysdevpath%/dev}"
devname="$(udevadm info -q name -p $syspath)"
[[ "$devname" == "bus/"* ]] && continue
eval "$(udevadm info -q property --export -p $syspath)"
[[ -z "$ID_SERIAL" ]] && continue
echo "/dev/$devname - $ID_SERIAL"
)
done
Sur mon système, cela se traduit par:
/dev/ttyACM0 - LG_Electronics_Inc._LGE_Android_Phone_VS930_4G-991c470
/dev/sdb - Lexar_USB_Flash_Drive_AA26MYU15PJ5QFCL-0:0
/dev/sdb1 - Lexar_USB_Flash_Drive_AA26MYU15PJ5QFCL-0:0
/dev/input/event5 - Logitech_USB_Receiver
/dev/input/mouse1 - Logitech_USB_Receiver
/dev/input/event2 - Razer_Razer_Diamondback_3G
/dev/input/mouse0 - Razer_Razer_Diamondback_3G
/dev/input/event3 - Logitech_HID_compliant_keyboard
/dev/input/event4 - Logitech_HID_compliant_keyboard
Explication:
find /sys/bus/usb/devices/usb*/ -name dev
Les appareils qui apparaissent dans /dev
ont un dev
fichier dans leur /sys
répertoire. Nous recherchons donc des répertoires correspondant à ces critères.
syspath="${sysdevpath%/dev}"
Nous voulons le chemin du répertoire, alors nous nous en débarrassons /dev
.
devname="$(udevadm info -q name -p $syspath)"
Cela nous donne le chemin /dev
correspondant à cet /sys
appareil.
[[ "$devname" == "bus/"* ]] && continue
Ceci filtre les choses qui ne sont pas des appareils réels. Sinon, vous obtiendrez des choses comme des contrôleurs et des concentrateurs USB.
eval "$(udevadm info -q property --export -p $syspath)"
La udevadm info -q property --export
commande répertorie toutes les propriétés du périphérique dans un format pouvant être analysé par le shell en variables. Nous faisons donc simplement appel eval
à cela. C’est aussi la raison pour laquelle nous encapsulons le code entre parenthèses afin que nous utilisions un sous-shell et que les variables soient effacées à chaque boucle.
[[ -z "$ID_SERIAL" ]] && continue
Plus de filtrage des choses qui ne sont pas des appareils réels.
echo "/dev/$devname - $ID_SERIAL"
J'espère que vous savez ce que cette ligne fait :-)
/dev
une entréelsusb
? Ou voulez-vous répertorier tous les périphériques/dev
dérivés d'un périphérique USB physique? Ou êtes-vous simplement en train de vouloirls /dev/ttyUSB*
?