IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Imprimer ce qui a été affiché à l'écran dans un fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Imprimer ce qui a été affiché à l'écran dans un fichier
    Bonjour,

    J'ai encore un souci, un peu plus compliqué que les derniers. Je travaille dans putty et programme à l'aide de ksh. Le script que j'ai conçu affiche plusieurs choses à l'écran à l'aide de la commande tput. Ces choses sont en effet modifiées au cours du temps. J'aimerais que le résultat final apparaisse dans un fichier txt. Y a-t-il une commande qui reprenne tout ce qui a été affiché depuis l'exécution du début script.

    exemple de code :
    print "======================================"
    print "= YOYO = STATUT = HAUTEUR = TEMPS EN L'AIR ="
    print "======================================"
    read lancement?"Voulez-vous lancer les 10 yoyo's"
    tput 3 0
    for yoyo in $yiyi; do
    print "= $yoyo = $statut = $hauteur_max_1 = $temps_1 ="
    done
    Lancement.
    # Cette fonction va modifier le statut, la hauteur et le temps écoulé depuis le lancement à différents instants. Le statut n'est pas changé en même temps que la hauteur maximale ou le temps écoulé (fonction différente, on place juste l'information au bon endroit quand il le faut à l'aide de tput)
    Un tout grand merci pour toutes les idées que vous auriez.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 37
    Points
    37
    Par défaut
    vu que le bt est de garder l'historique je ferais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    read lancement?"Voulez-vous lancer les 10 yoyo's"
    tput 3 0
    for yoyo in $yiyi; do
    print "= $yoyo = $statut = $hauteur_max_1 = $temps_1 =" 
    done | tee fichier

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    Ah oui ! L'usage de 'tput cup 3 0' ne te permettra pas d'avoir un fichier de sortie cohérent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
     
    clear
    milk() {
    tput cup 3 0
    echo "beurk! du lait ! grr..."
    tput cup 3 25
    echo "ah ben non, c'est bon le lait"
    }
     
    milk |tee test/milk.txt
    affiche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
     
    beurk! du lait ! grr...  ah ben non, c'est bon le lait
    mais le fichier test/milk.test ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ESC[4;1Hbeurk! du lait ! grr...
    ESC[4;26Hah ben non, c'est bon le lait
    Ce qui est assez laid ^^

    Comment interrompts-tu le script ?
    - S'il y a un timeout, tu récupères simplement les valeurs et tu les diriges vers un fichier.
    - Si c'est par ctrl-C, il faut prévoir une 'trap' (cf. man ksh #Built-in Commands) dont l'action consistera à récupèrer simplement les valeurs et les diriger vers un fichier, et le sig sera celui d'un ctrl-C
    ...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Les yoyos sont lancés les uns après les autres mais pour un même yoyo, je peux avoir des événements spéciaux. Du style, une mouette se prend en plein vol le yoyo, il est "relancé". Une nouvelle ligne s'affiche pour laquelle on aura une nouvelle hauteur, un nouveau temps mais le statut reste modifié dans la première ligne. Actuellement, les anciennes valeurs ne sont pas sauvegardées, on ne sait pas combien de fois le yoyo va être relancé par une mouette ou tout autre objet volant (non identifié).

    Complexité supplémentaire, la hauteur et le temps sont dans des fonctions découplée, je calcule/affiche d'abord toutes les hauteurs, puis tous les temps, et je modifie le statut de la première ligne. Les deux seules valeurs qui sont sauvegardées pour le moment sont les lignes correspondant à la première pour le yoyo en cours et le maximum entre le nombre de ligne correspondant aux hauteurs et aux temps. Ce qui me permet d'écrire la ligne pour le nouveau yoyo lancé au bon endroit.

    A défaut, je mettrais | tee après chaque boucle for en effet mais avec le résultat qu'on connait (différence entre ce qui est observé en temps réel et dans le fichier)

    Le programme s'arrête quand le dernier yoyo a été lancé et est retombé.

    Mmm. Dur dur de penser en shell. :-p

Discussions similaires

  1. Réponses: 9
    Dernier message: 25/03/2014, 15h22
  2. Réponses: 5
    Dernier message: 18/03/2014, 10h05
  3. Réponses: 5
    Dernier message: 25/04/2008, 19h15
  4. Réponses: 7
    Dernier message: 23/04/2006, 23h07
  5. Copie d'écran dans un fichier
    Par angsthase dans le forum Autres Logiciels
    Réponses: 12
    Dernier message: 17/08/2005, 00h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo