Shell script : redirection synchrone vers un fichier ?

Shell script : redirection synchrone vers un fichier ? - Shell/Batch - Programmation

Marsh Posté le 07-05-2005 à 18:54:54    

Salut à tous,
 
J'ai un super TP à faire en shell script, c'est un système de chat. Tous les clients se écrivent dans un fichier commun placé dans /tmp, et ils le surveillent avec un tail pour obtenir les nouveaux messages. Il y a plein de super routines pour se connecter et écrire, mais ce n'est pas vraiment ce qui nous intéresse ici.
 
En fait, il faut arriver à surveiller la connexion d'un pote, et lorsque c'est le cas, lui envoyer un gentil message. J'ai donc cherché et trouvé une ligne de commande qui pourrait correspondre :

tail -n 0 -q -f $GLOBALFILE | awk "/^$POTE/ {print \"  [$PSEUDO] Salut $POTE !\"}" >> $GLOBALFILE


Cette commande fonctionne correctement, c'est à dire que lorsque j'écris dans le fichier global une ligne commençant par $POTE il va bien écrire dans le fichier global "Salut $POTE" avec mon pseudo derrière. Seulement il ne l'écrit que lorsque je termine le tail via kill -15 ... donc ça ne me sert à rien, puisqu'il va écrire tous les coucous à la fin de la session.
 
Pire : si je met cette ligne dans un script, et que j'interrompt le script via CTRL-C, rien n'est écrit. J'aimerais savoir s'il existe un moyen de forcer l'écriture de manière synchrone, pour que la redirection se fasse systématiquement lorsqu'une ligne est envoyée à tail et ensuite à awk. J'ai tenté un petit "sync" mais rien n'est écrit dans le fichier ... ce doit être un problème que les dev shell ont dû rencontrer souvent ;).
 
Merci de votre aide,
Fred

Reply

Marsh Posté le 07-05-2005 à 18:54:54   

Reply

Marsh Posté le 07-05-2005 à 18:59:52    

Autre chose : lorsque j'affiche la variable "$!" j'obtiens le pid de awk, alors que j'aimerais celui de tail pour pouvoir le tuer en fin de programme. Comment obtenir ce pid ?

Reply

Marsh Posté le 07-05-2005 à 21:50:57    

J'utilise un fichier intermédiaire et ça semble mieux fonctionner ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed