Salut! Identification

Recherche avancée

Petit problème de script bash

Envoyé par Shlafenflarst 
Ce forum est en lecture seule. C'est une situation temporaire. Réessayez plus tard.
Petit problème de script bash
mercredi 25 mars 2015 22:59:59
Salut à tous !

Sous Debian, 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. Dans ce script, il y a une commande, et je veux qu'elle ne soit exécutée que si gmusicbrowser est lancé. Pour ça j'utilise la commande ps -e | grep gmusicbrowser, qui me donne une ligne si il est lancé et rien du tout s'il n'est pas lancé. Le problème étant le suivant : mon script fonctionne très bien quand je le présente de cette façon :

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

Mais il exécute la commande que gmusicbrowser soit lancé ou non quand je le présente de cette façon :

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

Une idée de pourquoi ?

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 !
Re: Petit problème de script bash
mercredi 25 mars 2015 23:04:54
Autant faire simple.
pgrep gmusicbrowser && ma commande
Re: Petit problème de script bash
mercredi 25 mars 2015 23:50:58
J'ai pas cru nécessaire de le préciser, mais "ma commande" n'est pas une simple commande. Dans un des scripts j'ai un sed et un grep, et dans l'autre j'ai plusieurs lignes, avec un autre if, un peu compliqué de mettre tout ça sur une seule ligne.
Mais j'ai trouvé le problème, c'est tout con, il manquait des guillements aux variables :

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

Reste ma question bonus : où mettre les scripts ?
Re: Petit problème de script bash
jeudi 26 mars 2015 00:23:13
Quelque part dans /usr/local ?
Re: Petit problème de script bash
jeudi 26 mars 2015 10:41:48
Alors:
pgrep gmusicbrowser > /dev/null && {
    commande 1
    commande 2
    ...
}
Toujours pas la peine de faire compliqué. :)

(J'ai rajouté le /dev/null pour faire plus joli, si tu veux.)

Par ailleurs, ton script va bugguer si quoi que ce soit dans ton environnement pose la variable NULL. La bonne façon de tester qu'une variable d'environnement n'est pas vide c'est avec le flag -n:
if [ -n "$(pgrep gmusicbrowser)" ] ; then
  echo 'oh là là!'
  ...
fi
Liste des flags de test bash ici: [www.gnu.org]

Pour le stockage des scripts, y'a pas de convention précise. C'est toi qui vois comment tu fais. Perso j'ai tout mon code en différents languages dans ~/Code/<language>/<projet>, et pour les trucs que je veux pouvoir lancer de partout, je mets un lien symbolique dans ~/bin, que j'ai rajouté dans mon PATH.
Re: Petit problème de script bash
jeudi 26 mars 2015 11:52:37
OK, merci.

Pour le pgrep, effectivement, j'avais pas pensé à ça, mais y'a un autre problème, c'est que j'ai besoin du else. En effet, quand gmusicbrowser n'est pas lancé, si mon script n'exécute aucune commande, genmon m'affiche "XXX". Je dois donc faire echo " " pour qu'il n'affiche rien (enfin si, il affiche un espace, mais on voit rien).

Pour le -n, j'avais testé, mais j'avais pas la bonne syntaxe, donc ça marchait pas... j'essaierai de me rappeler de celle là.

Mais sinon, on m'a donné une autre solution pour le if :

if ps -e | grep -q gmusicbrowser
then
     ma commande
else
     echo " "
fi

Et pour l'emplaement, c'est noté. Si jamais je partage mon truc (ce qui est peu probable, j'ai l'impression d'être le seul utilisateur de gmusicbrowser sur la terre entière), je peux donc conseiller aux gens de se mettre leurs scripts où ils veulent.
Re: Petit problème de script bash
jeudi 26 mars 2015 14:10:48
Bon bah en fait c'est faisable avec pgrep, comme ça :

if pgrep gmusicbrowser &>/dev/null
then
     ma commande
else
     echo " "
fi

Plus simple, donc je garde.
Re: Petit problème de script bash
jeudi 26 mars 2015 19:46:39
Citation
Shlafenflarst
Reste ma question bonus : où mettre les scripts ?

Bah un script Bashfr, tu peux le mettre DTC.