![如何调试 zsh 中这个有问题的变量赋值?](https://linux22.com/image/158108/%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95%20zsh%20%E4%B8%AD%E8%BF%99%E4%B8%AA%E6%9C%89%E9%97%AE%E9%A2%98%E7%9A%84%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC%EF%BC%9F.png)
我怎样才能找到导致这种奇怪行为的原因?
~ 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"