任何开发测试工作都离不开的话题 – Debug.
bash 脚本自然也不能免俗
显示每一步执行的命令
默认情况下, bash 脚本执行时不会像 Windows 的 bat 一样显示每一次执行的命令.
虽然说这功能在执行时比较难看, 但在 Debug
时可以帮助我们查看脚本是执行到哪一行出现的问题
如果想让 bash 脚本运行时显示每行命令, 则需要在脚本开始添加如下命令:
参数说明:
几个 fake signal
EXIT
在脚本退出时会触发该信号
执行结果:
DEBUG
每一行命令执行前都会触发这个信号, 开启 set -o functrace
后函数内部也会触发
执行结果:
ERR
当有命令执行后的返回值不是 0 时触发该信号
执行结果
RETURN
当用 source
执行脚本返回后触发该信号
若执行 set -o functrace
, 则函数返回后也能触发该信号
执行结果
一个简易的 Debugger
一个 Debugger 需要的功能点:
-
断点
-
逐步执行
-
变量监视
-
显示当前执行位置和断点位置
-
不需要改动源码即可进行 Debug
实现原理:
利用 DEBUG
信号中断执行. 进而进入 debug 命令行
核心数组:
文件结构:
bashdb # 主脚本, 即驱动器
bashdb.pre # 添加到原脚本头的部分
bashdb.fns # 定义的函数们
关于 exec
命令
> 执行其参数, 用其并替代当前进程. 脚本中在 exec
后的命令都不会执行
> 在 cli 中执行 exec 后… 当前 shell 会直接退出