Bash : rediriger l'affich vers fichier mais en laissant l'affich

Résolu
mortelrdv -  
 mortelrdv -
Bonjour,

je suis SunOS ajamei1u1 5.10 Generic_147441-01 i86pc i386 i86pc (le bash est donc surement un peu plus limité que les distrib de maintenant)

j'ai un script modif.sh interactive qui fais aussi appel a d'autres scripts/commandes. je voudrais savoir s'il est possible de placer à l'interieur de mon script quelque chose qui indique que ce qui sera affiché a l'ecran devra AUSSI etre envoyer dans un fichier ?
#!/bin/bash

#activer le log vers le fichier modif.log

.
.
.
.
..
#desactiver le log


j'ai cru comprendre qu'il est possible lancer comme ceci :
modif.sh | tee modif.log

mais je préférais que ce soit a l'interieur du script, ce qui permettra de simplement lancer :
modif.sh

c'est un script utiliser par plusieurs personnes pas forcement adepte ligne commande et/ou comme moi oublie/flemmard, qui oublie de faire " | tee modif.log"

merci
PS : le script n'a pas vocation a fonctionner en arriere plan, genre cron

3 réponses

  1. laoshu Messages postés 1251 Statut Membre 351
     
    Bonjour,

    Tu dois pouvoir trouver mieux... mais tu peux ajouter |tee modif.log à la fin de chaque ligne pour laquelle tu souhaites avoir une trace dans le fichier.

    # | tee modif.log : écrase puis écrit modif.log
    # | tee -a modif.log : ajoute à la fin du fichier

    Ceci dit, fait des essai sur un petit script pour vérifier que ça marche de la même manière... Et je crois qu'il doit exister un moyen plus propre de le faire.

    bon courage,
    0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    #activer le log vers le fichier modif.log 
    ( commandes 
    ...) | tee modif.log 
    #desactiver le log
    pour autant qu'il n'y ait pas de définitions de variables puisque entre () on crée une sous tâche
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      Salut,

      puisque entre () on crée une sous tâche
      Alors utiliser les "{}" qui elles restent dans le shell courant, non ? ;-)

      Voir aussi de placer en début de script :
      #!/bin/bash
      
      exec >  >(tee -a fich.log)
      exec 2> >(tee -a fich.log >&2)
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      {} effectivement !
      on peut aussi mettre ça dans le script, mais la sortie n'est plus séquentielle et ça me dérange
      exec 3>&1 > >(tee -a log)
      ......
      # Restore stdout
      exec 1>&3 3>&-
      
      0
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      avec {} le problème des variables reste le même
      0
  3. mortelrdv
     
    Merci a tous

    la solution de zipe31 correspond à ce que j'ai en tete ;-)
    0