たとえば、
$ 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/node
PATH
/usr/local/bin/node
execve()
node
execve()
ENOENT
bash
では、bash
ハッシュテーブルのエントリを削除できます。
hash -d node
または、ハッシュテーブル全体を削除します(すべてのPOSIXシェルで動作):
hash -r
答え2
Ubuntu Linux 16.04では、「該当するファイルまたはディレクトリが存在しません」とは、現在の作業ディレクトリを切り替える必要があることを意味し、「コマンドが見つかりません」は問題を解決するためにapt-get install xxxyyy_zzzを使用する必要があることを意味します.