Comment rediriger la sortie standard

Résolu/Fermé
bheadman
Messages postés
105
Date d'inscription
samedi 1 septembre 2007
Statut
Membre
Dernière intervention
17 septembre 2008
- 11 juil. 2008 à 14:58
 cjean - 13 nov. 2008 à 15:06
Bonjour,

Bon c'est un peu plus compliqué que ça en a l'aire, car je connais les principes d'entrée sortie standard :

1 entrée standard (ex :clavier) > prog.sh 1> sortie standard (ex: écran)
2> sortie standard des erreurs (le plus souvent idem que "1>")

Mon problème c'est que pour débeuguer un prog je l'éxecute de la manière suivante :

sh -x prog.sh

Mais ce dernier étant relativement long je ne vois pas la totalité du retour sur mon shell (putty). Je souhaitais donc savoir comment rediriger la sortie "std", de ce mode de fonctionnement précis, vers un fichier texte.

Pour info j'ai déjà essayé ceci :

sh -x prog.sh > tralala.txt
mais je ne récupère que la sortie std de ma commande "grep" qui se trouve dans le prog

Cordialement.
BHeaDMaN

4 réponses

> ca ecrase a chaque fois le fichier

>> " append" ajoute des lignes sans effacer les autres
1
bheadman
Messages postés
105
Date d'inscription
samedi 1 septembre 2007
Statut
Membre
Dernière intervention
17 septembre 2008

11 juil. 2008 à 15:04
de toute façon je fait un "echo>tralala.txt" avant chaque traitement :D afin de ne pas avoir un fichier de 300Mo en moins de temps qu'il ne faut pour l'écrir.
-1
Redirection de la sortie standard vers la sortie d'erreur :

sh -x prog.sh > tralala.txt 2>&1
0
yoogui
Messages postés
2019
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
13 avril 2011
314
11 juil. 2008 à 15:01
Surement une réponse stupide mais comme j'ai pas la même approche du problème on sait jamais..

Et si tu enlevais le grep de ton programme pour avoir tout sur le txt...puis filtrer après ?
-2
bheadman
Messages postés
105
Date d'inscription
samedi 1 septembre 2007
Statut
Membre
Dernière intervention
17 septembre 2008

11 juil. 2008 à 15:10
mon grep fait partie du script est en est une fonction indispensable, c'est volontairement que je n'ai pas redirigé le sortie std (1 et 2 pour ceux qui suivent :D) et que donc celui-ci affiche son résultat dans le shell.

vioci en exemple le gros du programme, hors mis les déclarations de variable et autre test en tout genre :

while [ ${Line} -lt ${Num_Line} ]
do
User_Path=`nawk -v x=${Line} 'NR == x { print }' ${File_Login}`
echo ${User_Path} | egrep "${User_List}" <<----- ici j'ai omis, volontairement, la chaine "1> /dev/null 2>&1"
retval=$?
if [ $retval != 0 ]
then
echo ${User_Path} >> ${File_temps}
else
User_Ribfou=`echo ${User_Path} | nawk -F":" '{ print $5 |"cut -c1-3" }'`
if [ ${User_Ribfou} != usr ]
then
echo ${User_Path} | sed 's/:'"${User_Ribfou}"'/:usr/g' >> ${File_temps}
fi
fi
Line=`expr ${Line} + 1`
done
-1
bheadman
Messages postés
105
Date d'inscription
samedi 1 septembre 2007
Statut
Membre
Dernière intervention
17 septembre 2008

11 juil. 2008 à 15:02
Honte sur moi,

une fois n'est pas coutume ma plume (ou mon clavier) à été plus vif que mon esprit.

Voici la solution à ce pitit problème :

sh -x prog.sh 2> tralala.txt

En réfléchissant 30s (en relisant mon précédent poste) je me suis dit que le "-x" étant un mode débeugue permettant de voir toutes erreurs, il serait fort probable que la sortie std soit la même que pour les erreurs et BINGO.

J'espère au moins que ce petit bout poste serviras à quelqu'un d'autre.

Cdlt.
BHeaDMaN
-2