J'ai utilisé la sortie de ioreg
et ajouté quelques analyses avec perl pour produire un csv des ports série par rapport aux informations usb (comme VID, PID, SN).
ioreg -r -c IOUSBHostDevice -x -l | perl -ne 'BEGIN {print "Numéro de série USB,idProduit,idVendeur,Périphérique IOCallout\n"} /"Numéro de série USB" = "(.+)"/ && ($sn=$1); /"idProduit" = (.+)/ && ($ip=$1); /"idVendeur" = (.+)/ && ($iv=$1); /"Périphérique IOCallout" = "(.+)"/ && print "$sn,$ip,$iv,$1\n"'
Exemple de sortie:
Numéro de série USB,idProduit,idVendeur,Périphérique IOCallout
123456,0x1234,0xaabb,/dev/cu.usbmodem1234561
987654,0xabcd,0xaabb,/dev/cu.usbmodem9876542
000001,0x4321,0xccdd,/dev/cu.usbmodem0000013
Cette sortie peut facilement être analysée ou utilisée en conjonction avec grep
pour trouver le périphérique désiré et le port série.
Explication:
ioreg -r -c IOUSBHostDevice -x -l
liste les périphériques hôtes usb, utilisez -x
pour une sortie en hexadécimal
perl -ne
pour analyser la sortie de ioreg, -n
itère sur la sortie ligne par ligne, -e
exécute la commande spécifiée
BEGIN {print "Numéro de série USB,idProduit,idVendeur,Périphérique IOCallout\n"}
affiche l'en-tête du csv
/"Numéro de série USB" = "(.+)"/ && ($sn=$1);
correspond à un modèle et stocke la valeur capturée dans une variable $sn
/"idProduit" = (.+)/ && ($ip=$1); /"idVendeur" = (.+)/ && ($iv=$1);
similaire à ci-dessus
/"Périphérique IOCallout" = "(.+)"/ && print "$sn,$ip,$iv,$1\n"
chaque fois qu'il y a une ligne contenant IOCalloutDevice, nous savons que nous traitons un port série (vous pourriez changer cela en IODialinDevice
pour tty
au lieu de cu
). Affichez le port série et les dernières informations usb stockées (qui viennent toujours avant dans la sortie ioreg) sous forme de ligne délimitée par des virgules.