Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 25-03-2015 22:14:55

Ralph W. Llama
Membre
Lieu : /dev/null
Distrib. : Jessie 8.0
Noyau : Linux 3.16.0-4-amd64 / 686-pae
(G)UI : Xfce 4.10.1
Inscription : 09-08-2013
Site Web

[résolu] Script n'exécutant une commande que si un logiciel est lancé

Salut à tous !

Je cherche à améliorer un script, lancé lancé régulièrement par genomn dans un panel Xfce, qui m'affiche des informations sur la lecture en cours dans gmusicbrowser (plus de détails ici). Dans ce script, il y a une commande, et je veux qu'elle ne soit exécutée que si gmusicbrowser est lancé. J'ai réussi à faire fonctionner le truc, mais je trouve pas ça parfaitement clean, j'aurais donc aimé savoir s'il existe une commande ou une variable capable de me dire si oui ou non un logiciel est lancé. En gros, voilà ce que je veux :

if [ gmusicbrowser lancé = true ]
then
     ma commande
else
     echo " "
fi



Avez-vous une idée ?

Et au passage, sachant que je pense éventuellement partager mon truc une fois qu'il sera bien propre, quel est le meilleur répertoire pour stocker les scripts ? (ils sont actuellement dans ~/.scripts, un répertoire que j'ai créé pour mes scripts persos, donc dans mon /home, ce qui peut poser problème sur un ordinateur avec plusieurs comptes utilisateurs)

Merci d'avance pour vos réponses !

Dernière modification par Ralph W. Llama (27-03-2015 19:42:17)


Vivre libre ou mourir !


Des détails sur mes PCs

Hors ligne

#2 25-03-2015 22:31:08

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Tu peux essayer avec « ps -C gmusicbrowser » comme suit :


if ps -C gmusicbrowser &>/dev/null
then
# ici le code quand gmusicbrowser est lancé

else
      echo "  "
fi
 


Je suppose ici que le nom de la commande est bien gmusicbrower dans /proc/<pid>/cmdline, certaines commandes changent leurs noms et parfois dans les interfaces graphiques, le nom réel d'une commande ne correspond pas à celui que l'on trouve dans un menu ou sur une icône…

Dernière modification par enicar (25-03-2015 22:33:00)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#3 25-03-2015 22:33:01

nIQnutn
Modérateur
Lieu : Lyon
Distrib. : Jessie
Noyau : Linux 3.16-amd64
(G)UI : XFCE
Inscription : 16-03-2012
Site Web

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Hors ligne

#4 25-03-2015 22:49:29

Ralph W. Llama
Membre
Lieu : /dev/null
Distrib. : Jessie 8.0
Noyau : Linux 3.16.0-4-amd64 / 686-pae
(G)UI : Xfce 4.10.1
Inscription : 09-08-2013
Site Web

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Merci à vous !

Effectivement, la commande ps correspond à ce que je cherche. ps -C gmusicbrowser affiche deux lignes quand gmusicbrowser est lancé, et une seule quand il n'est pas lancé, ce qui ne m'arrange pas trop, mais si je fais ps -e | grep gmusicbrowser, j'ai une ligne quand il est lancé et rien quand il n'est pas lancé. Voilà donc ma solution ;

if [ $(ps -e | grep gmusicbrowser) != $NULL ]
then
     ma commande
else
     echo " "
fi



EDIT : présenté comme ça, mon script ne marche pas, il exécute ma commande dans tous les cas. Par contre, il marche quand je le présente de la manière suivante :

if [ $(ps -e | grep gmusicbrowser) = $NULL ]
then
     echo " "
else
     ma commande
fi



Pourquoi ?

Dernière modification par Ralph W. Llama (25-03-2015 22:55:39)


Vivre libre ou mourir !


Des détails sur mes PCs

Hors ligne

#5 26-03-2015 00:25:35

nIQnutn
Modérateur
Lieu : Lyon
Distrib. : Jessie
Noyau : Linux 3.16-amd64
(G)UI : XFCE
Inscription : 16-03-2012
Site Web

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

regarde http://debian-facile.org/atelier:chanti … es-boucles
il y a peut être des pb dans la syntaxe du if

Hors ligne

#6 26-03-2015 00:38:25

Ralph W. Llama
Membre
Lieu : /dev/null
Distrib. : Jessie 8.0
Noyau : Linux 3.16.0-4-amd64 / 686-pae
(G)UI : Xfce 4.10.1
Inscription : 09-08-2013
Site Web

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

En effet, il manquait des guillements. Comme ça, ça marche :

if [ "$(ps -e | grep gmusicbrowser)" != "$NULL" ]
then
     ma commande
else
     echo " "
fi



Merci !


Vivre libre ou mourir !


Des détails sur mes PCs

Hors ligne

#7 26-03-2015 05:43:23

smolski
administrateur quasi...modo
Lieu : AIN
Distrib. : 8 (jessie) 64 bits + backports
Noyau : 4.6.0-0.bpo.1-amd64
(G)UI : gnome 3.14.1
Inscription : 21-10-2008

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé


"Définition d'eric besson : S'il fallait en chier des tonnes pour devenir ministre, il aurait 2 trous du cul." - JP Douillon
"L'utopie ne signifie pas l'irréalisable, mais l'irréalisée." - T Monod (source :  La zone de Siné)
"Je peux rire de tout mais pas avec n'importe qui." - P Desproges
"saque eud dun" (patois chtimi : fonce dedans)

Hors ligne

#8 26-03-2015 07:36:56

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Tu peux aussi éviter de passer par un test entre crochets :


if ps -e |grep -q gmusicbrowser
then
# Commandes si gmusicbrowser est lancé

else
   echo "  "
fi
 


Le code de retour d'une expression avec un tube comme « ps -e |grep gmusicbrowser »
vaut la valeur de retour du grep. Or grep renvoie 0 si il trouve le motif
cherché, 1 si il ne le trouve pas, et 2 pour toute autre erreur. Un code de retour de zéro
veut dire vrai pour le shell. Ici, j'utilise l'option -q qui demande à grep
d'être silencieux, car ce que l'on veut savoir, c'est si il y a une correspondance ou non.


Aussi, si tu n'en as pas besoin, tu peux supprimer la branche else du if,
et faire ainsi :


if ps -e |grep -q gmusicbrowser
then
# Commandes si gmusicbrowser est lancé

fi
 


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#9 26-03-2015 09:52:40

sogal
Black Metal Modo
Distrib. : Debian Testing
Noyau : 4.7
(G)UI : Gnome
Inscription : 09-05-2013
Site Web

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Encore plus léger grâce à pgrep:

pgrep gmusicbrowser &>/dev/null && ma_commande


Machine perso : Thinkpad x230 Debian Stretch | Machine pro : Thinpad T450 openSUSE Leap 42.2

Hors ligne

#10 26-03-2015 10:20:28

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Très bien, pgrep, je n'y pensais plus tongue
Il faut quand même savoir que pgrep et ps -C ne donne pas toujours le même
résultat. Je sais, c'est bizarre, mais c'est l'expérience que j'ai faite. Ça doit provenir du
fait que les deux commandes ne consultent pas le même fichier dans /proc/<pid>/.
Il y a deux possibilités au moins :

  • /proc/<pid>/cmdline : la ligne de commande en entier nom de commande et arguments

  • /proc/<pid>/comm : uniquement le nom de la commande.



Ça doit venir du fait que les programmes peuvent modifier eux-mêmes leur propre nom, mais
que ce nom n'est pas modifié dans les deux fichiers… à vérifier wink

Dernière modification par enicar (26-03-2015 14:55:27)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#11 26-03-2015 12:32:20

Ralph W. Llama
Membre
Lieu : /dev/null
Distrib. : Jessie 8.0
Noyau : Linux 3.16.0-4-amd64 / 686-pae
(G)UI : Xfce 4.10.1
Inscription : 09-08-2013
Site Web

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Merci pour vos réponses !

enicar, j'ai testé ton truc, et ça marche nickel. Je garde donc ça. Par contre, quand gmusicbrowser n'est pas lancé, si mon script n'exécute aucune commande, genmon m'affiche "XXX". Je suis donc obligé de faire echo " " pour qu'il n'affiche rien.

sogalpunx, j'ai dit une commande pour simplifier, parce que je pensais que ça changeait pas grand chose, mais dans un script j'ai une ligne avec un sed et un cut, et dans un autre plusieurs lignes, avec un autre if, et j'ai besoin du else. J'ai pas l'impression que pgrep soit assez avancé pour ça. Mais je note ça, ça pourra me servir pour autre chose.

Reste ma dernière question : quel répertoire pour les scripts ?

Vivre libre ou mourir !


Des détails sur mes PCs

Hors ligne

#12 26-03-2015 13:30:18

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

pgrep pourrait convenir, on peut l'utiliser dans un if :


if pgrep gmusicbrowser &>/dev/null
then
# commande quand gmusicbrowser est lancé.

else
   echo "  "
if
 


Le truc, c'est que je ne sais pas si pgrep va lister un ou deux processus.
À priori il va faire comme « ps -C gmusicbrowser ». Et donc, ça ne te conviendra pas.
On pourrait quand même le faire, mais ça complique un peu, on se retrouve à
devoir faire une substitution de commande avec $(… ), et c'est justement ce que
j'avais voulu éviter avec ma façon de faire…

Dernière modification par enicar (26-03-2015 13:30:48)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#13 26-03-2015 14:30:50

sogal
Black Metal Modo
Distrib. : Debian Testing
Noyau : 4.7
(G)UI : Gnome
Inscription : 09-05-2013
Site Web

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Peu importe combien de processus pgrep va lister vu qu'on teste simplement si la commande réussit (c'est à dire s'il trouve un ou des processus correspond au nom) ou non (le programme n'est donc pas lancé).

Machine perso : Thinkpad x230 Debian Stretch | Machine pro : Thinpad T450 openSUSE Leap 42.2

Hors ligne

#14 26-03-2015 14:53:35

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

@sogalpunx oui, en fait, j'ai mal compris ce message :

Ralph W. Llama a écrit :


Effectivement, la commande ps correspond à ce que je cherche. ps -C gmusicbrowser affiche deux lignes quand gmusicbrowser est lancé, et une seule quand il n'est pas lancé, ce qui ne m'arrange pas trop



Effectivement, on se fiche pas mal du nombre de lignes affichées. En fait,  il n'a pas dû essayer
ma méthode complétement. Le problème avec « ps -C gmusicbrowser », c'est qu'il affiche une
ligne d'entête même si aucun processus ne correspond. Mais ça n'a pas d'importance car on
redirige la sortie vers /dev/null et que l'on regarde juste le code de sortie, comme avec
pgrep… C'est bien car ça supprime un tube.

Dernière modification par enicar (26-03-2015 14:58:36)


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#15 26-03-2015 15:06:31

Ralph W. Llama
Membre
Lieu : /dev/null
Distrib. : Jessie 8.0
Noyau : Linux 3.16.0-4-amd64 / 686-pae
(G)UI : Xfce 4.10.1
Inscription : 09-08-2013
Site Web

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Bon, du coup j'ai testé avec pgrep, et ça marche nickel. Encore plus simple, donc je garde ça. Merci !

Vivre libre ou mourir !


Des détails sur mes PCs

Hors ligne

#16 26-03-2015 15:30:48

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

@Ralph W. Llama: ce qui fait que « ps -C » devait fonctionner aussi wink

La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#17 26-03-2015 15:38:09

Ralph W. Llama
Membre
Lieu : /dev/null
Distrib. : Jessie 8.0
Noyau : Linux 3.16.0-4-amd64 / 686-pae
(G)UI : Xfce 4.10.1
Inscription : 09-08-2013
Site Web

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Effectivement, j'ai vérifié, le résultat est le même. Pas de raison de préférer l'un à l'autre ?

Vivre libre ou mourir !


Des détails sur mes PCs

Hors ligne

#18 26-03-2015 15:39:44

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Non, aucune raison wink

La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#19 26-03-2015 15:47:50

Ralph W. Llama
Membre
Lieu : /dev/null
Distrib. : Jessie 8.0
Noyau : Linux 3.16.0-4-amd64 / 686-pae
(G)UI : Xfce 4.10.1
Inscription : 09-08-2013
Site Web

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Nickel !

Reste toujours la question finale : dans quel répertoire mettre les scripts pour qu'ils soient accessibles à tous les utilisateurs du PC ? Je sais bien que ça marchera où qu'ils soient, mais je voudrais pas mélanger ça à des trucs qui n'ont rien à voir...

Vivre libre ou mourir !


Des détails sur mes PCs

Hors ligne

#20 26-03-2015 15:51:59

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Tu peux toujours les mettre dans /usr/local/bin ou créé un répertoire /usr/local/scripts, qu'il faudra
mettre dans la variable PATH (ou pas suivant ce que tu veux faire).

La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#21 27-03-2015 16:29:24

Ralph W. Llama
Membre
Lieu : /dev/null
Distrib. : Jessie 8.0
Noyau : Linux 3.16.0-4-amd64 / 686-pae
(G)UI : Xfce 4.10.1
Inscription : 09-08-2013
Site Web

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

OK, merci !

On me suggère /usr/share, aussi, qu'est-ce qui est le mieux ?

Dernière modification par Ralph W. Llama (27-03-2015 16:30:00)


Vivre libre ou mourir !


Des détails sur mes PCs

Hors ligne

#22 27-03-2015 19:39:53

enicar
Membre
Lieu : Grenoble
Distrib. : debian/sid
Noyau : Linux 4.8.10
(G)UI : openbox
Inscription : 26-08-2010

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

Ralph W. Llama a écrit :

On me suggère /usr/share, aussi, qu'est-ce qui est le mieux ?



Dans ce cas, je les mettrai plutôt dans /usr/local/share/scripts/.
Je préfère différencier, les programmes/scripts qui proviennent du système de paquetage
du reste, en les rangeant dans un endroit différent. Ça peut éviter bien des problèmes, amha.


La machine, c'est dépassé ! On va tout remplacer par des humains big_smile

Hors ligne

#23 27-03-2015 19:42:27

Ralph W. Llama
Membre
Lieu : /dev/null
Distrib. : Jessie 8.0
Noyau : Linux 3.16.0-4-amd64 / 686-pae
(G)UI : Xfce 4.10.1
Inscription : 09-08-2013
Site Web

Re : [résolu] Script n'exécutant une commande que si un logiciel est lancé

OK, ça marche. Merci à tous !

Vivre libre ou mourir !


Des détails sur mes PCs

Hors ligne

Pied de page des forums