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

나타나는 코드는 위에서 언급한 Hook인데, 그 일부가 범인임에 틀림없습니다.

범위를 좁힐 수 있는 실험은 다음과 같습니다.

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

관련 정보