我一直在使用exec 5> debug_output.txt / BASH_XTRACEFD =“5”来调试脚本,但它确实在一夜之间停止工作

时间:2017-08-31 15:11:06

标签: bash ubuntu-14.04

我是脚本新手,所以我一直在使用:

exec 5> debug_output.txt
BASH_XTRACEFD="5"

将脚本的输出发送到debug_output.txt。这允许我将脚本的输出与脚本正在进行的操作进行比较,我觉得这非常有帮助。昨晚我正在测试这个设置,它工作正常。我今天早上来了,现在它不起作用。我在完全相同的终端中使用完全相同的脚本。将运行该脚本并创建debug_output.txt文件,但该文件为空。我尝试删除debug_output.txt和myscript1.sh并重新创建它,没有任何变化。重新启动也无效。这是我的剧本:

#!/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 

这是输出:

(^)#(^)#(^)#(^)bminter@ubuntu:~/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

(^)#(^)#(^)#(^)bminter@ubuntu:~/bashscripttutorial$

以下是脚本运行后的内容:

(^)#(^)#(^)#(^)bminter@ubuntu:~/bashscripttutorial$ ls
debug_output.txt  foo  myscript1.sh  myscript1.sh~  myscript2.sh  myscript2.sh~
(^)#(^)#(^)#(^)bminter@ubuntu:~/bashscripttutorial$ cat debug_output.txt 
(^)#(^)#(^)#(^)bminter@ubuntu:~/bashscripttutorial$ 
(^)#(^)#(^)#(^)bminter@ubuntu:~/bashscripttutorial$ 

我希望我在昨晚工作时获得了debug_output.txt文件的内容,但是当我重新启动时我丢失了。

1 个答案:

答案 0 :(得分:0)

来自bash documentation

  

BASH_XTRACEFD

     

如果设置为与有效文件描述符对应的整数,Bash会将启用“set -x”时生成的跟踪输出写入该文件描述符。这允许将跟踪输出与诊断和错误消息分开。取消设置BASH_XTRACEFD或分配新值时,将关闭文件描述符。取消设置BASH_XTRACEFD或为其分配空字符串会导致跟踪输出发送到标准错误。请注意,将BASH_XTRACEFD设置为2(标准错误文件描述符)然后取消设置将导致标准错误被关闭。

所提供的脚本中缺少set -x

bash -xset -o errtrace