Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix
Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 22/01/2010, 14h19   #1
Membre du Club
 
Inscription : janvier 2007
Messages : 67
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 67
Points : 43
Points : 43
Par défaut "tail -f" dans un shell - comment poursuivre ? ..trap

Dans un shell je lance une commande qui écrit dans un fichier de messages FILE, ensuite, toujours dans le shell, je fais tail -n 100 -f FILE pour voir le fichier de messages au fur et à mesure qu'il est remplit. Tout ça c'est dans une boucle, car il y a plusieurs commandes à faire, chacune écrivant dans un fichier de messages différent.

J'exécute le shell, et quand il a fini d'écrire dans FILE, je fais <Ctrl>C pour sortir du tail. Malheureusement, il sort complètement du shell à ce moment là.

Comment faire pour continuer avec le reste de commandes à faire dans le shell ?


J'ai essayé de mettre un trap "" 2 3 15 avant le tail -f, mais alors on ne peut plus sortir du tail !

Dernière modification par vpovpo ; 22/01/2010 à 18h29.
vpovpo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2010, 17h42   #2
Membre du Club
 
Inscription : janvier 2007
Messages : 67
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 67
Points : 43
Points : 43
J'y suis arrivé !
Voilà comment, le cas où quelqu'un serait intéressé:

En fait il faut définir une fonction (je l'ai appelée ici sortie) qui sera exécutée quant on fait <Ctrl>C (code d'interruption = 2):
Code :
1
2
3
4
5
6
7
8
sortie () {
  cod_interr=$? ; cod_interr=$(($cod_interr-128))
  if [ ! -z "$1" ] ; then echo " $cod_interr $1" ; fi
}
#... lignes du script UNIX
trap "sortie interruption_client" 2 3 15
tail -n 20 -f $FILE
echo "toto titi tata"
Avec ce bout de programme, après <Ctrl>C pour sortir du tail, on va avoir à l'écran le texte "toto titi tata", preuve que le programme continue.

La fonction doit contenir au minimum une instruction, par exemple un simple echo.

Ici j'ai fait un peu plus, c'est à dire que je récupère le code cod_interr qui correspond au type d'interruption qui a été faite (2 pour <Ctrl>C) et je transmets aussi un argument à cette fonction lors de la définition du trap ("interruption_client"), argument que je vais écrire après avoir récupérer la main dans la fonction sortie. Après l'exécution de cette fonction, le programme continue avec la ligne suivant le tail.
a+

Dernière modification par vpovpo ; 22/01/2010 à 18h09.
vpovpo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2010, 11h31   #3
Invité régulier
 
Inscription : mars 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 25
Points : 7
Points : 7
Merci bcp d'avoir pris la peine de mettre la solution.
Ca marche nickel !
abonn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2010, 14h17   #4
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 909
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 909
Points : 1 260
Points : 1 260
Il y a plus simple:
Code :
1
2
3
4
5
#... lignes du script UNIX
trap "echo interruption client" 2
tail -n 20 -f $FILE
echo "toto titi tata"
trap - 2
Ne pas oublier de rétablir le gestionnaire d'interruption (trap - 2) sinon le script ne pourra plus être interrompu par ^C par la suite.
Ne pas trapper 3 et 15, ca ne sert à rien ici.
__________________
ɹǝsn *sıɹɐlos*
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 14h35.


 
 
 
 
Partenaires

Hébergement Web