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



A voir également:

3 réponses

laoshu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention   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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
{} 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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
avec {} le problème des variables reste le même
0
mortelrdv
 
Merci a tous

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