#1 Le 21/08/2008, à 18:54
- nicolabuntu
[résolu]programation shell - détection fermeture de fenetre
Bonjour,
je voulais tester les fonction de zenity alors j'ai écrit un script assez simple mais j'ai un problème avec une condition voici mon code
#!/bin/bash
zenity --info --text="Ouverture de firefox"
firefox www.google.fr
if [ $? -eq 0 ]
then
zenity --info --title="Résultat" --text="firefox fermé"
else
zenity --info --title="Résultat" --text="Y a un problème :@"
fi
Ce que je voulais faire c'est afficher le message après avoir fermé firefox et pas après le lancement réussi de firefox est ce que vous m'indiquer comment faire et si c'est possible de faire cette manipulation. Merci d'avoir au moins lu mon message, et bonne soirée.
Dernière modification par nicolabuntu (Le 22/08/2008, à 18:18)
Hors ligne
#2 Le 21/08/2008, à 19:37
- chaoswizard
Re : [résolu]programation shell - détection fermeture de fenetre
C'est pas plutôt une boucle while qu'il faut utiliser ; du style
Tant que firefox ouvert
Ne rien faire
Afficher un message
Ubuntu ==> Debian ==> Archlinux
Hors ligne
#3 Le 21/08/2008, à 19:52
- Totor
Re : [résolu]programation shell - détection fermeture de fenetre
#!/bin/bash
zenity --info --text="Ouverture de firefox"
firefox www.google.fr &
numPID=$!
# on patiente tant que le process existe
while [ `ps --pid ${numPID}|wc -l` -ne 1];
do
sleep 1
done
zenity --info --title="Résultat" --text="firefox fermé"
par contre, ça risque de te prendre du CPU !
Par ailleurs, cela ne fonctionnera pas si firefox est déjà lancé...car l'instance de firefox que tu lances demandera à la première d'ouvrir la page google puis se fermera.
-- Lucid Lynx --
Hors ligne
#4 Le 21/08/2008, à 19:54
- nicolabuntu
Re : [résolu]programation shell - détection fermeture de fenetre
merci, finalement j'ai posté un peu, ce que j'ai fait fonctionne mais maintenant quand je lance mon shell via mon raccourcis sur le bureau je fait lancer dans un terminal, le terminal s'ouvre le message s'affiche firefox se lance quand il s'arrête le 2eme message apparaît, ma question peut on caché le terminal ?
Hors ligne
#5 Le 21/08/2008, à 20:07
- Totor
Re : [résolu]programation shell - détection fermeture de fenetre
regarde les options de ton terminal (je suis septique mais bon....)
et si ça existe, tu dois pouvoir le rajouter à ton raccourci !
-- Lucid Lynx --
Hors ligne
#6 Le 21/08/2008, à 20:28
- nicolabuntu
Re : [résolu]programation shell - détection fermeture de fenetre
ok merci, je viens de tester votre code Totor, il y a une erreur dans la boucle du while que je ne trouve pas du a mon manque d'expérience du shell est ce que vous sauriez ou elle se trouve ?
Dernière modification par nicolabuntu (Le 21/08/2008, à 20:37)
Hors ligne
#7 Le 21/08/2008, à 21:04
- chaoswizard
Re : [résolu]programation shell - détection fermeture de fenetre
Perso, moi, j'aurais fait ça :
#!/bin/bash
#
# Overture de Fx
zenity --info --text="Ouverture de Firefox"
firefox www.google.fr & sleep 1
# Initialisation de la variable test
test=$(ps axo comm | grep firefox)
# Test pour savoir si Fx est ouvert
while [ "$test" == "firefox" ];
do
test=$(ps axo comm | grep firefox)
sleep 1
done
# Afficher une fois que Fx est fermé
zenity --info --title="Résultat" --text="Firefox fermé"
exit 0
Ubuntu ==> Debian ==> Archlinux
Hors ligne
#8 Le 21/08/2008, à 21:16
- Totor
Re : [résolu]programation shell - détection fermeture de fenetre
ok merci, je viens de tester votre code Totor, il y a une erreur dans la boucle du while que je ne trouve pas du a mon manque d'expérience du shell est ce que vous sauriez ou elle se trouve ?
oui, il faut un espace entre le "1" et le crochet fermant :
while [ `ps --pid ${numPID}|wc -l` -ne 1 ];
@chaoswizard :
oui, mais rajoute un "$" au grep car de mon côté j'ai firefox-2 de lancé mais aussi firefox-2-bin. il me faudrait faire grep "firefox-2$" pour que ton script fonctionne....
Dernière modification par Totor (Le 21/08/2008, à 21:17)
-- Lucid Lynx --
Hors ligne
#9 Le 21/08/2008, à 21:29
- chaoswizard
Re : [résolu]programation shell - détection fermeture de fenetre
oui, mais rajoute un "$" au grep car de mon côté j'ai firefox-2 de lancé mais aussi firefox-2-bin. il me faudrait faire grep "firefox-2$" pour que ton script fonctionne....
Ouais, ben après faut adapter à sa machine (pour moi c'est firefox).
On lui donne l'idée, faut qu'il se débrouille après !
EDIT : J'aurais mis un firefox* moi...
C'est un $ en bash ?
Dernière modification par chaoswizard (Le 21/08/2008, à 21:30)
Ubuntu ==> Debian ==> Archlinux
Hors ligne
#10 Le 21/08/2008, à 21:32
- nicolabuntu
Re : [résolu]programation shell - détection fermeture de fenetre
j'ai écrit un code plus simple a mon sens, sans pipe, grep, sed et autre mais avec plus de condition le voici qu'est ce que vous en pensez :
#!/bin/bash
zenity --question --title="Etat" --text="Ce programme fermera Firefox"
#si valider alors retour 0
if [ $? -eq 0 ]
then
#si firefox tourne je le tue sinon rien
pgrep firefox
if [ $? -eq 0 ]
then
killall -I firefox
fi
#et je le lance
zenity --info --title="Etat" --text="Ouverture"
firefox www.google.fr
#si j'ai la fenetre ouverte je ne suis pas là sinon elle est fermé et je suis ici
if [ $? -eq 0 ]
then
#l'application est bien fermé j'affiche
zenity --info --title="Etat" --text="Fermeture"
else
#sinon sortie prématuré
zenity --info --title="Etat" --text="Sortie prématurée"
fi
else
exit
fi
le seul problème dans ce code est que firefox affiche : voulez-vous restaurer la session ou en ouvrir une autre
Hors ligne
#11 Le 21/08/2008, à 21:37
- chaoswizard
Re : [résolu]programation shell - détection fermeture de fenetre
Ben le fait d'utiliser des if, tu n'as pas ce que tu voulais au départ, à savoir :
je voulais faire c'est afficher le message après avoir fermé firefox
donc...
le seul problème dans ce code est que firefox affiche : voulez-vous restaurer la session ou en ouvrir une autre
Ben avec un killall super bourrin au milieu...
sans pipe
Fantasme du soir ?!
Dernière modification par chaoswizard (Le 21/08/2008, à 21:40)
Ubuntu ==> Debian ==> Archlinux
Hors ligne
#12 Le 21/08/2008, à 21:40
- Totor
Re : [résolu]programation shell - détection fermeture de fenetre
c'est grep qui interprète le motif et non le shell bash.
D'ailleurs, il faut mettre le motif entre guillemet.
Cela dit, je cherchais à avoir uniquement la ligne correspondant au motif firefox-2 D'où le $ pour indiquer la fin de ligne (et pour être certain, j'aurai rajouté un ^ en début de motif :
"^firefox-2$"
-- Lucid Lynx --
Hors ligne
#13 Le 21/08/2008, à 21:41
- chaoswizard
Re : [résolu]programation shell - détection fermeture de fenetre
c'est grep qui interprète le motif et non le shell bash.
Ah ouais...
Je savais pas (ou du moins, je n'y ai pas pensé !)
Ubuntu ==> Debian ==> Archlinux
Hors ligne
#14 Le 21/08/2008, à 21:51
- nicolabuntu
Re : [résolu]programation shell - détection fermeture de fenetre
@chaoswizard
Ben le fait d'utiliser des if, tu n'as pas ce que tu voulais au départ, à savoir :
tu peux tester le code chez moi il fonctionne comme il faut : si firefox est lancer, je le ferme et je lance la page internet que je veux et quand je ferme firefox le message s'affiche
Ben avec un killall super bourrin au milieu...
tu as une commande qui ferme un programme correctement si oui je suis preneur
Fantasme du soir ?!
grave
Hors ligne
#15 Le 21/08/2008, à 21:54
- Totor
Re : [résolu]programation shell - détection fermeture de fenetre
Bon, pour revenir au pb, voilà ce que je ferais :
#!/bin/bash
process="firefox-2"
zenity --info --text="Ouverture de firefox"
numPID=`pgrep -l "${process}"|grep "${process}$"|cut -f1 -d' '`
if [ "${numPID}" == "" ]; then
${process} www.google.fr &
numPID=$!
else
${process} www.google.fr &
fi
# on patiente tant que le process existe
while [ `ps --pid ${numPID}|wc -l` -ne 1 ];
do
sleep 1
done
zenity --info --title="Résultat" --text="firefox fermé"
comme ça, que firefox soit ouvert ou non avant, ça fonctionne.
Dernière modification par Totor (Le 21/08/2008, à 21:54)
-- Lucid Lynx --
Hors ligne
#16 Le 21/08/2008, à 22:14
- chaoswizard
Re : [résolu]programation shell - détection fermeture de fenetre
Ouais, je ferais comme Totor, je testerais avant pour ne pas le reouvrir :
#!/bin/bash
#
# Initialisation de la variable test
test=$(ps axo comm | grep firefox)
# Overture de Fx (si pas déjà ouvert)
if [ "$test" != "firefox" ]
then
zenity --info --text="Ouverture de Firefox"
firefox www.google.fr
sleep 1
else
zenity --info --text="Firefox était déjà ouvert"
fi
# Attendre que Fx se ferme
while [ "$test" == "firefox" ];
do
test=$(ps axo comm | grep firefox)
sleep 1
done
# Afficher une fois que Fx est fermé
zenity --info --title="Résultat" --text="Firefox fermé"
exit 0
Dernière modification par chaoswizard (Le 21/08/2008, à 22:18)
Ubuntu ==> Debian ==> Archlinux
Hors ligne