ZSH의 "충돌"로 인해 찾을 수 없는 명령이 아무 이유 없이 트리거되지 않습니다.

ZSH의 "충돌"로 인해 찾을 수 없는 명령이 아무 이유 없이 트리거되지 않습니다.

방금 ZSH(중요한 경우 oh-my-zsh에서)를 입력했는데 crash이상한 답변을 받았습니다.

zsh: permission denied: crash

일반적으로 예상되는 명령을 찾을 수 없는 동작 대신(플러그인이 설치되어 있기 때문에)

원인을 이해하도록 도와주시거나 이 문제를 디버깅할 수 있는 위치를 알려주세요. 다른 단어는 그러한 메시지를 트리거하지 않습니다. 이는 일반적인 명령을 찾을 수 없는 동작입니다. type crash상태 crash not found.

➜  ~ crash
zsh: permission denied: crash
➜  ~ type crash
crash not found
➜  ~ type crashaa
crashaa not found
➜  ~ type crsdadsadsa
crsdadsadsa not found
➜  ~ ieusrferw
zsh: command not found: ieusrferw
➜  ~ crashaa
zsh: command not found: crashaa
➜  ~ crash
zsh: permission denied: crash

호기심이 더 커졌습니다. sudo crash신고하세요 sudo: crash: command not found. :피

적시에 팁을 제공한 @Gilles 및 @StéphaneChavelaz에게 감사드립니다.

  1. set -x많은 출력을 제공하지만 코어는 변경되지 않으며 명령 실행 후 권한이 없습니다. 더 잘 이해되면 출력을 복사하여 붙여넣겠습니다 :-)
  2. 아니요, 해당 디렉토리가 없습니다 crash. 임시 디렉토리를 만들고 aaa거기에서 작업을 반복했지만 아무것도 변경되지 않았습니다. crash나도 어느 길로 갔는지 기억이 나지 않는다 . 또한 sudo는 도움이 되지 않으며 "해당 명령이 없습니다"라고 표시됩니다.

답변1

crash다음 디렉토리 중 하나에 라는 디렉토리를 생성하면 재현할 수 있습니다 $path.

$ mkdir -p ~/bin/crash
$ path+=(~/bin)
$ crash
zsh: permission denied: crash
$ type crasn
crasn not found

이는 해당 디렉토리가 실행을 시도하고 있기 permission denied때문입니다 (그리고 zsh나머지에서 crash찾을 수 있는 다른 잠재적인 명령이 없기 때문입니다 $path). 이제 를 입력하는 동안 디렉터리를 실행하려고 하면 type해당 디렉터리가 보고되지 않으며 이는 오류로 간주될 수 있습니다.zshcrash

ls -ld -- $^path/crash(N/)확인해보세요 .

dash, tcsh( which) 및 fish동일한 문제가 있습니다. 비슷한 불일치가 ksh93있지만 mksh적어도 해당 오류 메시지가 더 유용합니다.

$ ksh -c crash
ksh: crash: cannot execute [Is a directory]
$ ksh -c 'type crash'
ksh: whence: crash: not found

관련 정보