2017-08-31 1 views
0

travail, je suis nouveau script, donc je l'ai utilisé:J'utilise exec 5> debug_output.txt/BASH_XTRACEFD = « 5 » pour les scripts de débogage, mais il littéralement arrêté du jour au lendemain

exec 5> debug_output.txt 
BASH_XTRACEFD="5" 

à envoie la sortie d'un script à debug_output.txt. Cela me permettait de comparer la sortie du script avec ce que le script faisait, ce que je trouve très utile. Je testais avec cette configuration la nuit dernière et ça fonctionnait bien. Je suis arrivé ce matin et maintenant ça ne marche pas. J'utilise exactement le même script dans le même terminal. Le script va s'exécuter et le fichier debug_output.txt est créé mais il est vide. J'ai essayé de supprimer debug_output.txt et le myscript1.sh et de le recréer, sans changement. Le redémarrage n'a pas fonctionné non plus. Voici mon script:

#!/bin/bash 

exec 5> debug_output.txt 
BASH_XTRACEFD="5" 
PS4='$LINENO: ' 

var1=blah 
var2=foo 

echo Currently in $0 
echo 
echo $0 :: var1 : $var1, var2 : $var2 

export var1 
echo 
echo Entering myscript2.sh 
./myscript2.sh 
echo 
echo Back in $0 
echo $0 :: var1 : $var1, var2 : $var2 
echo 

est ici la sortie:

(^)#(^)#(^)#(^)[email protected]:~/bashscripttutorial$ ./myscript1.sh 
Currently in ./myscript1.sh 

./myscript1.sh :: var1 : blah, var2 : foo 

Entering myscript2.sh 
Currently in ./myscript2.sh 

./myscript2.sh :: var1 : blah, var2 : 

Back in ./myscript1.sh 
./myscript1.sh :: var1 : blah, var2 : foo 

(^)#(^)#(^)#(^)[email protected]:~/bashscripttutorial$ 

Voici le contenu après que le script est exécuté:

(^)#(^)#(^)#(^)[email protected]:~/bashscripttutorial$ ls 
debug_output.txt foo myscript1.sh myscript1.sh~ myscript2.sh myscript2.sh~ 
(^)#(^)#(^)#(^)[email protected]:~/bashscripttutorial$ cat debug_output.txt 
(^)#(^)#(^)#(^)[email protected]:~/bashscripttutorial$ 
(^)#(^)#(^)#(^)[email protected]:~/bashscripttutorial$ 

Je voudrais avoir le contenu de la sortie de débogage. fichier txt quand il a travaillé la nuit dernière, mais j'ai perdu cela quand j'ai redémarré.

Répondre

0

de bash documentation

BASH_XTRACEFD

Si la valeur est un nombre entier correspondant à un descripteur de fichier valide, bash va écrire la sortie de trace générée lorsque « set -x » est activé pour que le descripteur de fichier. Cela permet de séparer la sortie de suivi des messages de diagnostic et d'erreur. Le descripteur de fichier est fermé lorsque BASH_XTRACEFD est désactivé ou qu'une nouvelle valeur lui a été affectée. La désactivation de BASH_XTRACEFD ou l'affectation de la chaîne vide entraîne l'envoi de la sortie de trace à l'erreur standard. Notez que si vous définissez BASH_XTRACEFD sur 2 (le descripteur de fichier d'erreur standard) puis que vous le désactivez, l'erreur standard sera fermée.

Il manque donc set -x dans le script fourni.

Ou bash -x ou set -o errtrace

+0

qui l'a fait. J'ai ajouté 'set -x' juste en dessous de 'BASH_XTRACEFD =" 5 "'. Je ne comprends toujours pas pourquoi cela a fonctionné la nuit dernière sans elle. Merci –

+0

cela pourrait fonctionner si lancé 'bash -x myscriptn.sh' –