我怎样才能找到导致这种奇怪行为的原因?
~ 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"