在不启用extdebug的情况下,能否通过DEBUG陷阱取消Bash命令执行?
在不启用extdebug的情况下,能否通过DEBUG陷阱取消Bash命令执行?
我发现在Bash里,要是开启shopt -s extdebug选项,就能借助DEBUG陷阱来有条件地取消任意命令的执行。但问题是,extdebug带着一堆我完全不想要的副作用,根本没法一直开着它。Bash手册里对这些副作用的说明如下:
extdebug
如果在Shell启动时或启动文件中设置该选项,会在Shell启动前执行调试器配置文件,效果和--debugger选项完全一致。如果是启动后再设置,则会启用调试器专用的行为:
- 使用
declare内置命令的-F选项时,会显示每个传入的函数名对应的源文件名和行号。- 若
DEBUG陷阱执行的命令返回非零值,下一条命令会被跳过,不执行。- 若
DEBUG陷阱执行的命令返回值为2,且当前Shell正在子例程(比如Shell函数,或是通过./source内置命令执行的脚本)中运行,Shell会模拟调用return。BASH_ARGC和BASH_ARGV会按照对应描述更新。- 启用函数追踪:命令替换、Shell函数,以及通过
( command )调用的子Shell,都会继承DEBUG和RETURN陷阱。- 启用错误追踪:命令替换、Shell函数,以及通过
( command )调用的子Shell,都会继承ERR陷阱。
所以我想请教大家:有没有办法不用启用extdebug,也能通过DEBUG陷阱来取消命令的执行呢?
备注:内容来源于stack exchange,提问作者ynn
相关产品推荐
相关产品推荐

