#1 Le 15/01/2022, à 21:35
- Tawal
[Bash] Lister les n° des /dev/input/eventX liés à la souris
Hello,
Le but est de trouver une commande listant sous la forme a,b,c les numéros des fichiers /dev/input/eventX liés à/aux souris.
Ce que j'arrive à faire, c'est obtenir une liste du genre : a,b,c,
La dernière virgule n'est pas génante.
Et j'ai 2 commandes pour le faire.
Sauf que je trouve que ce sont 2 monstres.
$ realpath $(echo /dev/input/by-path/* | sed -e 's/ /\n/g' | grep event-mouse) | awk '{n=substr($0,17); printf n","}'
8,9,$
$ awk '{f="find /dev/input/by-path"; while ((f | getline fl)>0){r="realpath "fl; if (fl ~ /event-mouse/) {r | getline i; n=substr(i,17); printf n","}}}' < <(echo)
8,9,$
Peut-on faire mieux ? je n'en doute pas !
Sachant aussi que cette commande sera utilisée pour affecter une variable.
Merci de votre aide, vos corrections et autres conseils
Edit:
Correction du titre
Dernière modification par Tawal (Le 15/01/2022, à 22:57)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#2 Le 15/01/2022, à 22:06
- MicP
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
Bonjour
find /dev/input/by-path/ -name '*event-mouse*'|xargs -I% sh -c 'e=$(readlink %);printf ${e##*t},'
Dernière modification par MicP (Le 15/01/2022, à 22:11)
Hors ligne
#3 Le 15/01/2022, à 22:21
- Tawal
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
Ah oui, bien vu d'inclure la sélection "event-mouse" dans le find.
Même la construction de la commande est mieux : 3 commandes externes, 1 seul pipe.
Par contre, tu utilises readlink, quelle différence avec realpath ?
Même en lisant leur man respectif, je ne vois pas.
Merci.
Edit:
En m'inspirant de ton exemple :
find /dev/input/by-path/ -name '*event-mouse*' -exec sh -c 'e=$(realpath $1);printf "%s," ${e##*t}' sh '{}' \;
Un peu plus longue, mais plus que 2 commandes externes et plus de pipe
Dernière modification par Tawal (Le 15/01/2022, à 22:49)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#4 Le 15/01/2022, à 22:33
- MicP
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
… Par contre, tu utilises readlink, quelle différence avec realpath ? …
C'était par habitude, j'avais bien lu realpath dans tes lignes de commandes,
mais en réfléchissant à comment faire, j'ai pensé à readlink puisqu'il s'agissait d'un lien symbolique
Du coup, je m'interroge aussi,
alors je suis allé voir les pages man des deux commandes,
et j'y ai lu que :
… Remarquez que realpath(1) est la commande à privilégier pour sa fonction de canonisation. …
Alors, autant utiliser realpath :
find /dev/input/by-path/ -name '*event-mouse*'|xargs -I% sh -c 'e=$(realpath %);printf ${e##*t},'
Dernière modification par MicP (Le 15/01/2022, à 22:42)
Hors ligne
#5 Le 15/01/2022, à 22:51
- Tawal
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
Je te remets mon "edit" du dessus, j'avais oublié d'actualiser
"
En m'inspirant de ton exemple :
find /dev/input/by-path/ -name '*event-mouse*' -exec sh -c 'e=$(realpath $1);printf "%s," ${e##*t}' sh '{}' \;
Un peu plus longue, mais plus que 2 commandes externes et plus de pipe
"
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#6 Le 15/01/2022, à 23:00
- Watael
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
$ for f in /dev/input/by-path/*event-mouse; do f=$(realpath "$f"); n["${f##*event}"]="on s'en fout : on s'en servira pas"; done
$ (IFS=','; echo "${!n[*]}")
5,7
NOOOooon !
$ realpath $(echo /dev/input/by-path/* | sed -e 's/ /\n/g' | grep event-mouse) | awk '{n=substr($0,17); printf n","}'
à mettre dans le recueil des commandes à ne jamais imaginer.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#7 Le 15/01/2022, à 23:18
- Tawal
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
Ah, mais je n'ai honte de rien ... tant que je ne recommence pas
D'ailleurs, si j'ai posé la question, c'est bien que je sentais que faisais des c........
Et finalement, vu que c'est pour mettre dans un script, vous l'aurez compris, je préfère la version de Watael car plus lisible :
for f in /dev/input/by-path/*event-mouse
do
f=$(realpath "$f")
n["${f##*event}"]="x"
done
events=$(IFS=','; echo "${!n[*]}")
que
events=$(find /dev/input/by-path/ -name '*event-mouse*'|xargs -I% sh -c 'e=$(realpath %);printf ${e##*t},')
Merci à vous
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#8 Le 15/01/2022, à 23:20
- MicP
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
Ok,Merci Watael, je crois qu'elle va m'occuper un bon moment avant que je comprenne comment elle fonctionne cette ligne de commande
Du coup, je ne vais pas m'ennuyer ce week-end (et peut-être même toute la semaine prochaine)
Et il n'y a qu'une seule commande externe utilisée : realpath
tout le reste est du bash
…c'est bien que je sentais que faisais des c.......
Et moi, je suis passé derrière pour en rajouter une autre couche
Dernière modification par MicP (Le 15/01/2022, à 23:26)
Hors ligne
#9 Le 15/01/2022, à 23:37
- Watael
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
events=$(IFS=','; echo "${!n[*]}")
qu'as-tu l'intention de faire avec $events ? Ce format est-il indispensable ?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#10 Le 16/01/2022, à 01:23
- MicP
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
Ok, j'ai compris comment ça fonctionne
Je pensais qu'il me faudrait plus de temps.
Merci, c'est toujours un plaisir de lire vos messages.
Dernière modification par MicP (Le 16/01/2022, à 01:26)
Hors ligne
#11 Le 16/01/2022, à 10:02
- Tawal
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
J'ai besoin de ce format a,b,c car mon script comporte une option avec argument et cet argument est justement une liste des event sous cette forme. Cet argument est ensuite traité par une fonction gest_event().
La variable "events" servira a initialiser cette option à une valeur par défaut (qui est la liste des event de toutes les souris). Et sera traitée aussi par la fonction gest_event().
En gros, j'ai 3 souris, sans option (donc par défaut) mon script écoute et teste les "event" de chaque souris.
Or, avec l'option "-e", je peux limiter cette écoute à une seule ou deux souris (si je connais leur numéros d'event évidemment).
Voilà pour l'explication du format.
Peut-être une meilleure idée ?
Merci.
Edit:
Ajout du traitement de la liste a,b,c
Edit2:
Merci de me faire réfléchir
Une autre façon de faire serait de modifier la fonction gest_event() afin qu'elle puisse prendre 2 types d'entrées différentes :
- une liste de la forme a,b,c venant de l'option "-e" de la ligne de commande
- une liste des /dev/input/eventX venant de l'initialisation par défaut.
J'y réfléchis
Dernière modification par Tawal (Le 16/01/2022, à 10:26)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#12 Le 16/01/2022, à 12:09
- Watael
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
si je comprends bien, la fonction peut être appelée "automatiquement", ou "interactivement".
alors, si la fonction ne reçoit que ces arguments, ils n'ont pas besoin d'être dans ce format, et la fonction peut recevoir une simple liste.
et, lorsque le script, lui, reçoit les arguments de l'option -e, il peut les transformer en une simple liste/tableau, qui sera transmis(e) à la fonction.
en effet, une option n'accepte qu'un seul argument. Cet argument unique peut être "multiple" si ses sous-éléments sont mis entre guillemets (ce qui est maladroit/contre-intuitif pour des nombres), soit s'il est formaté avec un séparateur convenu (la virgule, c'est bien).
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#13 Le 16/01/2022, à 12:56
- Tawal
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
Oui, c'est bien ça
J'ajouterai que la fonction n'est appelée qu'une seule fois,
soit avec l'argument (ou la liste après traitement de l'argument) de l'option -e,
soit avec la liste des /dev/input/eventX liés aux souris obtenue simplement avec realpath /dev/input/by-path/*event-mouse.
Je pensais intégrer à la fonction le travail de distinguer le type d'argument reçu.
Ainsi que les traitements différents selon le type d'argument passé, sachant que la sortie de la fonction est la même quel que soit le type d'argument.
Dernière modification par Tawal (Le 16/01/2022, à 12:57)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#14 Le 16/01/2022, à 13:56
- Watael
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
Je pensais intégrer à la fonction le travail de distinguer le type d'argument reçu.
ce n'est pas son travail.
elle doit n'avoir qu'à traiter ses arguments positionnels.
c'est quand le script reçoit les données (avec l'option -e) , ou qu'il va les chercher, qu'elles doivent être préparées pour être passées à la fonction.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#15 Le 16/01/2022, à 14:39
- Tawal
Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris
Ok, c'est compris.
Je dois donc me pencher sur le traitement par le script lors de la réception de données via l'option -e.
Une liste de /dev/input/eventX en entrée de la fonction gest_event() simplifie du coup l'écriture de la fonction,
et est directement donnée par realpath /dev/input/by-path/*event-mouse.
Merci encore.
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne