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

Résolu/Fermé
mortelrdv - 10 janv. 2013 à 07:50
 mortelrdv - 19 janv. 2013 à 23:23
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

laoshu Messages postés 1231 Date d'inscription mardi 7 juin 2011 Statut Membre Dernière intervention 24 mai 2015 348
10 janv. 2013 à 09:01
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 18581 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 30 janvier 2023 5 583
Modifié par dubcek le 10/01/2013 à 09:04
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 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 557
10 janv. 2013 à 09:54
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 18581 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 30 janvier 2023 5 583
10 janv. 2013 à 10:57
{} 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 18581 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 30 janvier 2023 5 583
10 janv. 2013 à 14:20
avec {} le problème des variables reste le même
0
Merci a tous

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