web-dev-qa-db-ja.com

「コマンドが見つかりません」と「そのようなファイルやディレクトリはありません」の違いは何ですか?

例えば:

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

違いは何ですか?どちらの場合も、nodefooは無効なコマンドですが、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
34
gwg

これは、bashがコマンドの場所を記憶しているため、それを ハッシュ テーブルに保存するためです。

nodeをアンインストールした後、ハッシュテーブルは消去されず、bashnodeが_/usr/local/bin/node_にあると見なし、PATHルックアップをスキップします。 execve()を使用して_/usr/local/bin/node_を直接呼び出す。 nodeがなくなった場合、execve()ENOENTエラーを返します。これは、そのようなファイルやディレクトリがないことを意味します。bashはそのエラーを報告しました。

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

_hash -d node
_

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

_hash -r
_
60
cuonglm