如何调试 zsh 中这个有问题的变量赋值?

如何调试 zsh 中这个有问题的变量赋值?

我怎样才能找到导致这种奇怪行为的原因?

~ mary@advv
$ hsdhh() a=evil

~ mary@advv
$ echo "$a"
evil

~ mary@advv
$ a=good

~ mary@advv
$ echo "$a"
evil

更新:我发现eval "$(fasd --init auto)"导致此错误并提交了问题。谢谢!

答案1

Zsh 在每个命令之前和之后运行一些代码。这通常用于更新提示和终端标题。某些代码可能存在错误并修改变量a(如果这只发生在a),或者有时在不应该的情况下评估命令行的一部分(如果每个变量名都发生这种情况)。

检查你的钩子函数调试陷阱:

which precmd
which preexec
which zshaddhistory
print -l $precmd_functions
print -l $preexec_functions
print -l $zshaddhistory_functions
which TRAPDEBUG
trap | grep DEBUG

了解正在发生的情况的另一种方法是启用追踪

~ mary@advv
$ set -x
+ …
~ mary@advv
$ a=good
+ …
~ mary@advv
$ echo "$a"
evil

出现的代码是我上面提到的钩子,其中的某些部分一定是罪魁祸首。

一项可以缩小范围的实验是:

~ mary@advv
$ a=good; echo "$a"

相关内容