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 /sysrecherche de périphériques USB dotés d'un ID_SERIALattribut. 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 /devont un devfichier dans leur /sysré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 /devcorrespondant à cet /sysappareil.
[[ "$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 --exportcommande 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 :-)
/devune entréelsusb? Ou voulez-vous répertorier tous les périphériques/devdérivés d'un périphérique USB physique? Ou êtes-vous simplement en train de vouloirls /dev/ttyUSB*?