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 /sys
mencari perangkat USB dengan ID_SERIAL
atribut. 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 /dev
memiliki dev
file di /sys
direktori 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 /dev
yang sesuai dengan /sys
perangkat 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 --export
perintah daftar semua properti perangkat dalam format yang bisa diurai oleh shell ke dalam variabel. Jadi kami hanya memanggil eval
ini. 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 :-)
/dev
dengan entri dilsusb
? Atau Anda ingin membuat daftar semua perangkat/dev
yang berasal dari perangkat USB fisik? Atau Anda hanya inginls /dev/ttyUSB*
?