Ne istediğinden emin değilim. Birkaç kez 'port' den bahsediyorsunuz, ama sonra örneğinizde, cevabın /dev/ttyUSB0bir cihaz değil, bir port olduğunu söylersiniz . Yani bu cevap her cihaz için dev yolunu bulma ile ilgili.
Aşağıda, özniteliğe /syssahip USB aygıtları ararken aygıtlar arasında dolaşan hızlı ve kirli bir komut dosyası verilmiştir ID_SERIAL. Genellikle yalnızca gerçek USB aygıtları bu özniteliğe sahip olur ve bu nedenle onunla filtreleme yapabiliriz. Bunu yapmazsak, listede fiziksel olmayan bir çok şey görürsünüz.
#!/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
Sistemimde bu, aşağıdakilerle sonuçlanır:
/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
Açıklama:
find /sys/bus/usb/devices/usb*/ -name dev
Ortaya çıkan cihazların dizininde /devbir devdosya var /sys. Bu yüzden bu kriterlere uyan dizinleri ararız.
syspath="${sysdevpath%/dev}"
Dizin yolunu istiyoruz, o yüzden ayrılıyoruz /dev.
devname="$(udevadm info -q name -p $syspath)"
Bu bize /devbu /syscihaza karşılık gelen yolu verir .
[[ "$devname" == "bus/"* ]] && continue
Bu, gerçek cihaz olmayan şeyleri filtreler. Aksi takdirde, USB denetleyicileri ve hub'ları gibi şeyler alırsınız.
eval "$(udevadm info -q property --export -p $syspath)"
udevadm info -q property --exportKomut listesi değişkenlere kabuk tarafından çözümlenen bir biçimde tüm cihaz özellikleri. Yani biz sadece buna çağrı eval. Bu ayrıca kodu parantez içine almamızın, alt kabuk kullanmamızın ve değişkenlerin her döngüde silinmesinin nedeni de budur.
[[ -z "$ID_SERIAL" ]] && continue
Gerçek cihaz olmayan şeylere daha fazla filtre uygulamak.
echo "/dev/$devname - $ID_SERIAL"
Umarım bu çizginin ne yaptığını biliyorsundur :-)
/devbir girişi ile ilişkilendirmek ister misinizlsusb? Veya/devfiziksel bir USB cihazından türetilen tüm cihazları listelemek mi istiyorsunuz ? Yoksa sadece istiyorls /dev/ttyUSB*musun?