Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

Edit:
Correction du titre wink

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 smile

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 :

man readlink a écrit :
… 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 tongue
"
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 smile
"


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. big_smile smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 15/01/2022, à 23:18

Tawal

Re : [Bash] Lister les n° des /dev/input/eventX liés à la souris

lol
Ah, mais je n'ai honte de rien ... tant que je ne recommence pas roll
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 wink


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) big_smile

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 lol

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

tawal a écrit :
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.

Hors 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 smile
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 smile
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 wink

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.

Hors 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 smile
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.

Hors 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