Saya tidak yakin apa yang Anda tanyakan. Anda menyebutkan 'port' beberapa kali, tetapi kemudian dalam contoh Anda, Anda mengatakan jawabannya adalah /dev/ttyUSB0, yang merupakan jalur dev perangkat, bukan port. Jadi jawaban ini adalah tentang menemukan jalur dev untuk setiap perangkat.
Di bawah ini adalah skrip cepat dan kotor yang berjalan di perangkat /sysmencari perangkat USB dengan ID_SERIALatribut. Biasanya hanya perangkat USB nyata yang akan memiliki atribut ini, sehingga kami dapat memfilternya. Jika tidak, Anda akan melihat banyak hal dalam daftar yang bukan perangkat fisik.
#!/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
Di sistem saya, ini menghasilkan sebagai berikut:
/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
Penjelasan:
find /sys/bus/usb/devices/usb*/ -name dev
Perangkat yang muncul /devmemiliki devfile di /sysdirektori mereka . Jadi kami mencari direktori yang cocok dengan kriteria ini.
syspath="${sysdevpath%/dev}"
Kami ingin jalur direktori, jadi kami menanggalkannya /dev.
devname="$(udevadm info -q name -p $syspath)"
Ini memberi kita jalan /devyang sesuai dengan /sysperangkat ini .
[[ "$devname" == "bus/"* ]] && continue
Ini menyaring hal-hal yang bukan perangkat yang sebenarnya. Kalau tidak, Anda akan mendapatkan hal-hal seperti pengontrol & hub USB.
eval "$(udevadm info -q property --export -p $syspath)"
The udevadm info -q property --exportperintah daftar semua properti perangkat dalam format yang bisa diurai oleh shell ke dalam variabel. Jadi kami hanya memanggil evalini. Ini juga merupakan alasan mengapa kita membungkus kode dalam tanda kurung, sehingga kita menggunakan subkulit, dan variabel bisa dihapus pada setiap loop.
[[ -z "$ID_SERIAL" ]] && continue
Lebih banyak pemfilteran hal-hal yang bukan perangkat yang sebenarnya.
echo "/dev/$devname - $ID_SERIAL"
Saya harap Anda tahu apa yang dilakukan baris ini :-)
/devdengan entri dilsusb? Atau Anda ingin membuat daftar semua perangkat/devyang berasal dari perangkat USB fisik? Atau Anda hanya inginls /dev/ttyUSB*?