通过扩展PS4变量,增强调试shell脚本功能
PS4:跟踪输出的前缀。
原由:
-x是set命令中的一个选项,它用来进入跟踪方式。
这样会显示出脚本执行每一条命令及其参数,它是脚本调试中的一个有用选项。
它输出的被执行的命令行及参数前面会添加一个 "+" 号。
实际上,这个 "+" 号就是内置变量 $PS4的值。
如下图:
测试脚本
执行脚本
[root@kingdom shellFile_1]# bash -x ps4_1.sh
++ wc -l
++ ls
+ count=5
+ echo 5
5
案例1:
通过此案例来增强调试shell脚本功能
#!/bin/bash
#测试脚本
#auth:odysee
echo "如下是利用PS4变量增强脚本调试功能"
echo "************************"
#简单的制造一个无此文件错误
ll err.txt
echo "************************"
执行脚本
这里提示在第九行出错,并给出了错误信息
如上图所示,通过-x调试给出了错误信息
但是当我们的程序代码量上升,仅仅通过这样的提示信息可能不足以来更好定位错误。
所以,下面我们用set命令的-x选项,再配合$LINENO和$FUNCNAME内置变量来跟踪错误。
$LINENO:表示脚本执行到的当前行
$FUNCTION:实际上是一个数组变量,如同堆栈,$[FUNCTION[0]} 就是要显示出当前的执行函数。
(1) 修改PS4变量
vim ~/.bash_profile
在文件中加入如下两行,(文件中还有我们自定义的PS1和PS2变量)
#增强脚本调试
export PS4='+$LINENO: {${FUNCNAME[0]}}'
source ~/.bash_profile
使当期文件生效。
如上图显示所示,{}实际上是执行的当前函数,但是我们脚本里没有定义函数,所以里面没有内容,大家自己自行编写一个带有函数脚本测试一下。
所以我们通过bash -x参数 、$LINENO以及$FUNCNAME变量的配合使用,可以达到在调试脚本时跟踪脚本的执行流程及轨迹,从而以达到增强调试的效果。
欢迎大家给予宝贵的意见或者建议。
欢迎大家补充或者共享一些其他的方法。
感谢支持。