web-dev-qa-db-fra.com

Obtenir le nom et le chemin du fichier du périphérique USB connecté

si je lance le commun lsusb je reçois quelque chose comme:

Bus 003 Périphérique 003: ID 1a86: 7523 Adaptateur USB-série HL-340 de QinHeng Electronics

mais il ne montre pas le chemin du fichier de périphérique (c'est-à-dire ttyUSB0). Existe-t-il une commande qui fait cela?

à propos de dmesg et udevadm info ils sont trop verbeux.

Je préférerais une sortie plus simple, le mieux serait d’ajouter uniquement le chemin du fichier de périphérique à la sortie de lsusb, quelque chose comme:

Bus 003 Appareil 003: ID 1a86: 7523 Adaptateur USB-série HL-340 de QinHeng Electronics/dev/ttyUSB0

1
aster94

beaucoup de copier/coller m'a amené à nouveau ici dans l'espoir que cela serait utile pour les autres et aussi pour améliorer mon code

J'ai utilisé le code presque parfait de la réponse dans cette question et ajouté/enlevé quelques petites choses

#!/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
        [[ "$devname" == "input/"* ]] && continue
        [[ "$devname" == "video0"* ]] && continue

        eval "$(udevadm info -q property --export -p $syspath)"
        [[ -z "$ID_SERIAL" ]] && continue

        busnum="$(udevadm info -a -p  $(udevadm info -q path -n /dev/$devname) | awk -F "==" '/busnum/ {gsub("\"","");print $2}' | head -1)"
        devnum="$(udevadm info -a -p  $(udevadm info -q path -n /dev/$devname) | awk -F "==" '/devnum/ {gsub("\"","");print $2}' | head -1)"
        bus_dev=${busnum}:${devnum}
        lsusb="$(lsusb -s $bus_dev)"

        echo "$lsusb - /dev/$devname"
    )
done

sortie:

Périphérique de bus 003 005: ID 1a86: 7523 Adaptateur USB-série HL-340 de QinHeng Electronics -/dev/ttyUSB0

NOTE: je n'ai aucune expérience unix, donc si vous voulez améliorer le code, faites-le!

1
aster94