类似于此问题:bash recursive xtrace,但对于Zsh。
如何使所有Zsh子外壳继承xtrace选项?
例如,如果script1.sh
正在呼叫./script2.sh
而我运行zsh -x script1.sh
,我希望script2.sh
也启用xtrace模式。
对于Bash,答案是导出SHELLOPTS
变量。
Zsh是否有解决方案?
答案 0 :(得分:0)
您可以利用Zsh中的启动/关闭文件(请参阅man zshall
):Zsh始终在启动时读取(并执行)文件$ZDOTDIR/.zshenv
(如果未设置ZDOTDIR
,改为使用HOME
。因此,您可以将set -x
放在$ZDOTDIR/.zshenv
中,每个Zsh脚本都将在启用xtrace模式的情况下运行。
这是我在脚本中使用它的方式:
env_dir="$(mktemp -d)"
echo "set -x" > "${env_dir}/.zshenv"
export ZDOTDIR="${env_dir}"
zsh "$@"
unset ZDOTDIR
rm -rf "${env_dir}"
实际上,该解决方案也可以通过使用BASH_ENV
变量用于Bash,该变量指向一个类似的文件,该文件将在Bash启动时执行。