Bash 有一个有时有用的功能,如果您打开“ -x
”选项(我相信符号名称是xtrace
),Bash 会在执行脚本时输出每一行脚本。
我知道有两种方法可以实现这种行为:
- 在脚本本身中,说
set -x
- 在命令行上,将
-x
选项传递给 Bash。
有什么方法可以通过环境变量打开此选项吗?
(特别是,我自己没有调用 Bash,所以我无法向它传递任何选项,并且感兴趣的脚本位于压缩存档内,我真的不想重建它。如果我可以设置一个环境变量,它可能会被所有子进程继承......)
联机帮助页说了一些关于 的内容
BASHOPTS
,但是当我尝试时,Bash 说这是只读的。 (感谢您没有在联机帮助页中提及这一点。)同样,
SHELLOPTS
似乎也是只读的。您可以选择哪个FD与 一起使用
BASH_XTRACEFD
。但我仍然需要首先打开跟踪。
答案1
用于env
忽略readonly
标志。
env SHELLOPTS=xtrace ./yourscript
或者,如果您的父 shell 中有set -x
,您可以export SHELLOPTS
,则可以将其复制到环境中,从而复制到子 shell 中(感谢乔·卡萨东特为了这):
set -x # set xtrace flag
export SHELLOPTS # copy all options, including xtrace flag, to environment
./yourscript