Bash filtrer le résulat d'une commande puis la stopper

Résolu/Fermé
Dr snake - 20 oct. 2016 à 16:31
 Dr snake - 1 nov. 2016 à 21:28
Bonjour,

Je souhaite faire quelque chose de, je pense assez simple mais je suis débutant donc j'aimerais avoir vos avis.

Donc voila je souhaite lancer via xterm deux terminaux avec deux commandes actives a l'intérieur et en filtrer les résultats qui s'affichent.

Exemple:
Je lance deux commande xterm qui va me créer deux terminaux, 1 et 2 mais je veux pouvoir stopper immédiatement le xterm numéro 2 que seulement si j'ai le mot "résultat réussie !" qui s'affiche dans le xterm numéro 1.

En gros ça donnerai ça pour essayer de me faire bien comprendre:
Xterm numéro 1
Une commande bash qui donne le résultat suivant:
blablabla
etcetcetc
un moment plus tard
................
résultat réussie !


A ce moment la on stop le xterm numéro 2 qui ne sert plus a rien car on a obtenue résultat réussi dans le xterm numéro 1.

J'ai entendu parler de kill + le nom du PID ou encore de screen mais il faut etre capable de lire ce qui se passe dans xterm numéro 1 donc je sais pas trop par ou m'orienter.

Merci de votre aide.



7 réponses

Utilisateur anonyme
20 oct. 2016 à 17:45
salut,

mais quel est l'intérêt de lancer plusieurs xterm ?

les commandes lancées en "arrière-plan" ont leur PID placé, immédiatement après leur lancement, dans une variable
?!
.
0
Le xterm c'est pour du multi tache sans avoir trop a m'encombrer l'écran :)


D'accord mais du coup comment lire ce que renvoie xterm numéro 1 dans la console ? ("résultat réussie")

Autrement si j'ai bien compris, une fois que xterm 1 m'aura envoyé ce que je veux (résultat réussi), je récupère le pid de xterm 2 pour le stopper c'est bien sa ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
21 oct. 2016 à 11:31
hello
quelque chose comme ça ?
xterm -T xterm2 -e 'echo on attend; read a' & pid=$!
xterm -T xterm1 -e "sleep 12; echo resultat | grep -q resultat && kill $pid; sleep 8"
0
Il faut que xterm1 soit une commande active, je veux dire que le fait d'attendre que "résultat" s'affiche bloque pas xterm1 pour autant.
0
Oui c'est quelque chose comme ça :) je teste sa dès que je peux et je fais un retour.
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
21 oct. 2016 à 13:29
essayer
xterm -T xterm2 -e 'echo on attend; read a' & pid=$! ; xterm -T xterm1 -e "(sleep 12; echo resultat | grep -q resultat && kill $pid)&  $SHELL" &
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bon je crois que j'ai trouvé plus simple de faire avec un fichier que de faire avec xterm, mais j'ai encore quelques soucis...

En faite voila en gros ce que je veux faire, on a un fichier résultat.txt qui reste vide et tant qu'il reste vide con continu notre commande lancée précédemment.

Dès que le fichier se rempli, on stoppe la commande lancée précédemment.J'ai testé pgrep pour ça et ça marche nickel, par contre si j'utilise:

if test -s resultat.txt


Il détecte bien que mon fichier et vide quand c'est le cas mais si il je le rempli entre temps et que j'enregistre, la commande lancée précédemment ne se stoppe pas... Que dois-je utiliser pour vérifier intéractivement quand mon fichier contient quelque chose ? until peut-etre ?

Merci a vous.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
31 oct. 2016 à 19:50
Salut,

while
plutôt ;-)
0
Donc je dois faire un truc du genre:

while
test -s résutat.txt
do <macommande> done


Je suppose ?

Mais dans ce cas la commande ne va pas s'arréter meme si le fichier résultat.txt se rempli non ?
(je suis pas sur mon ordi de travail je peux pas vraiment tester)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
31 oct. 2016 à 23:38
En fait c'est soit :
while test ! -s résultat.txt; do …
ou
until test -s résultat.txt; do …
;-)
0
J'ai régler le problème avec until merci :)

J'ai un second problème avec les boucles mais ça concerne une autre fonction du prog donc je vais ouvrir un autre sujet la dessus :)
0