我是脚本新手,所以我一直在使用:
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文件的内容,但是当我重新启动时我丢失了。
答案 0 :(得分:0)
BASH_XTRACEFD
如果设置为与有效文件描述符对应的整数,Bash会将启用“set -x”时生成的跟踪输出写入该文件描述符。这允许将跟踪输出与诊断和错误消息分开。取消设置BASH_XTRACEFD或分配新值时,将关闭文件描述符。取消设置BASH_XTRACEFD或为其分配空字符串会导致跟踪输出发送到标准错误。请注意,将BASH_XTRACEFD设置为2(标准错误文件描述符)然后取消设置将导致标准错误被关闭。
所提供的脚本中缺少set -x
。
或bash -x
或set -o errtrace