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

nicolabuntu a écrit :

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

Totor a écrit :

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

Totor a écrit :

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