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/)確認してください。

dashtcshwhich)とfish同じ問題があります。同様の不一致がksh93ありますがmksh、少なくともそのエラーメッセージがより便利です。

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

関連情報