我有一个测试脚本,其中有很多命令并将生成大量输出,我使用set -x
or set -v
and set -e
,因此当发生错误时脚本将停止。但我还是很难定位到哪一行执行停止了,从而定位问题所在。
有没有一种方法可以在每行执行之前输出脚本的行号?
或者输出由以下命令生成的命令show之前的行号set -x
?
或者任何可以处理我的脚本行位置问题的方法都会有很大的帮助。
谢谢。
你提到你已经在使用-x
。变量PS4
表示该值是在回显命令行之前打印的提示符-x
选项已设置,默认为:
其次是空间。
你可以改变PS4
发射LINENO
(当前执行的脚本或 shell 函数中的行号)。
例如,如果您的脚本如下:
$ cat script
foo=10
echo ${foo}
echo $((2 + 2))
因此执行它会打印行号:
$ PS4='Line ${LINENO}: ' bash -x script
Line 1: foo=10
Line 2: echo 10
10
Line 3: echo 4
4
http://wiki.bash-hackers.org/scripting/debuggingtips http://wiki.bash-hackers.org/scripting/debuggingtips给出了终极的PS4
这将输出跟踪可能需要的所有内容:
export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)