이 이상한 동작의 원인을 어떻게 찾을 수 있습니까?
~ 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
나타나는 코드는 …
위에서 언급한 Hook인데, 그 일부가 범인임에 틀림없습니다.
범위를 좁힐 수 있는 실험은 다음과 같습니다.
~ mary@advv
$ a=good; echo "$a"