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 08/01/2022, à 14:59

Tawal

[Résolu][Bash] xdotool + eval ?

Bonjour,

Je cherche à affecter les variables X, Y, SCREEN et WINDOW via la commande xdotool getmouselocation.
J'y arrive, mais quelle méthode est la mieux ? Ou faut-il encore faire différemment ?
Voici 2 retours différents de la commande :

$ /usr/bin/xdotool getmouselocation
x:840 y:366 screen:0 window:62914563
$ 
$ /usr/bin/xdotool getmouselocation --shell
X=840
Y=366
SCREEN=0
WINDOW=62914563
$ 

Et voici comment je traite ces retours afin d'affecter les valeurs aux variables :

$ eval $(/usr/bin/xdotool getmouselocation --shell)
$ echo $X $Y $SCREEN $WINDOW
840 366 0 62914563
$ 
$ unset X Y SCREEN WINDOW
$ read X Y SCREEN WINDOW < <(/usr/bin/xdotool getmouselocation | sed 's/x:\(.*\) y:\(.*\) screen:\(.*\) window:\(.*\)/\1 \2 \3 \4/')
$ echo $X $Y $SCREEN $WINDOW
840 366 0 62914563
$

Quelle est la meilleure méthode ?
eval est-il vraiment "evil" ici ? (dédicace à Watael) Et pourquoi ?

Je serais tenté de garder la formule avec eval car plus claire à mon sens, mais j'attends les conseils.

Merci de vos lumières smile

Dernière modification par Tawal (Le 08/01/2022, à 17:19)


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 08/01/2022, à 16:44

Watael

Re : [Résolu][Bash] xdotool + eval ?

tu pourrais te contenter d'un export :

$ export $(xdotool getmouselocation --shell)

mais ça augmente la portée des variables.

ici, on pourrait utiliser eval, car la sortie de la commande est "contrôlée" (elle ne consiste pas en une saisie utilisateur).
ce qui me gêne plus, c'est le risque de "téléscopage" avec d'autres variables d'environnement.


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

Hors ligne

#3 Le 08/01/2022, à 17:06

Tawal

Re : [Résolu][Bash] xdotool + eval ?

Ah oui, je n'avais pas pensé à un export, vu que je n'ai pas besoin d'une telle portée.
Mais qui peut le plus, peut le moins. Ne dit-on pas ?
Et le seul processus fils de mon script n'utilise pas ces variables.

C'est vrai que l'utilisation de lettres capitales pour le nom des variables pourrait bousculer d'autres variables d'environnement.
Et si c'était le cas, cela ne bousculerais que l'environnement de mon script (et des processus fils).
Or, je suis persuadé que les variables X, Y, SCREEN et WINDOW ne sont pas pré-définies par l'environnement.

Donc, j'opte pour l'export même s'il n'y a quasiment pas de risque d'exécution de code arbitraire avec eval.
Le souci de "télescopage" des variables d'environnement est presque identique avec export ou eval.

Merci.

Dernière modification par Tawal (Le 08/01/2022, à 17:07)


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 08/01/2022, à 17:53

Watael

Re : [Résolu][Bash] xdotool + eval ?

les variables étant transmises aux enfants du shell en cours (ton script), le risque de "téléscopage" est moindre avec eval.
s'il a lieu, ce ne sera que ton le script, pas dans l'exécution des programmes appelés.


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

Hors ligne

#5 Le 08/01/2022, à 20:41

Tawal

Re : [Résolu][Bash] xdotool + eval ?

RRR.gif
Tu me conseillerais de garder la formule avec eval ! UUU.gif


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