「コマンドが見つかりません」と「対応するファイルまたはディレクトリなし」の違いは何ですか?

「コマンドが見つかりません」と「対応するファイルまたはディレクトリなし」の違いは何ですか?

たとえば、

$ node
-bash: /usr/local/bin/node: No such file or directory
$ foo
-bash: foo: command not found

違いは何ですか?どちらの場合も、node間違っfooたコマンドですが、Unixがnodeバイナリを見つけることができないと思いますか?たとえば、プログラムをアンインストールするときにnodeプログラムをクリーンアップして次のようにする方法はありますか?

$ node
-bash: node: command not found

編集する:

コマンドの結果type:

$ type node
node is hashed (/usr/local/bin/node)
$ type foo
-bash: type: foo: not found

答え1

bashコマンドの場所を記憶して保存するためです。ハッシュテーブル。

アンロード後もnodeハッシュテーブルは消去されず、まだ存在していると見なされ、bash検索をスキップして呼び出しが直接使用されます。これ以上存在しない場合はエラーが返されます。つまり、対応するファイルやディレクトリがないことを意味し、エラーがユーザーに報告されます。node/usr/local/bin/nodePATH/usr/local/bin/nodeexecve()nodeexecve()ENOENTbash

では、bashハッシュテーブルのエントリを削除できます。

hash -d node

または、ハッシュテーブル全体を削除します(すべてのPOSIXシェルで動作):

hash -r

答え2

Ubuntu Linux 16.04では、「該当するファイルまたはディレクトリが存在しません」とは、現在の作業ディレクトリを切り替える必要があることを意味し、「コマンドが見つかりません」は問題を解決するためにapt-get install xxxyyy_zzzを使用する必要があることを意味します.

関連情報