Zsh继承xtrace选项

时间:2019-05-14 19:11:52

标签: zsh

类似于此问题:bash recursive xtrace,但对于Zsh。

如何使所有Zsh子外壳继承xtrace选项?

例如,如果script1.sh正在呼叫./script2.sh而我运行zsh -x script1.sh,我希望script2.sh也启用xtrace模式。

对于Bash,答案是导出SHELLOPTS变量。

Zsh是否有解决方案?

1 个答案:

答案 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启动时执行。