Linuxプログラムwhich
で、パスにインストールされている新しいプログラムを表示するためにシェルを更新する必要があるのはなぜですか(たとえば、ターミナルでtcsh
と入力します)。
which
がはっきりと見ることができるusr/local/bin
の他のプログラムと同じ権限を持つプログラムにアクセスできない理由に戸惑いました。
誰かがこれが素人の言葉で私にどのように機能するかを説明できますか?
rehash
をお試しください
man tcsh
は言う
rehash Causes the internal hash table of the contents of the directo-
ries in the path variable to be recomputed. This is needed if
new commands are added to directories in path while you are
logged in. This should be necessary only if you add commands
to one of your own directories, or if a systems programmer
changes the contents of one of the system directories. Also
flushes the cache of home directories built by tilde expansion.
素人の言葉で言えば、tcshはきびきびとした応答を提供したいので、コマンドの内部テーブル(おそらくハッシュテーブル)とそれらが見つかる場所を構築します。おそらく起動時にこれを行います。残念ながら、あなたや管理者がそのテーブルを更新する必要がある何かをしたときに気付くメカニズムはありません。
これが、csh派生物よりもkshまたはbashを好む多くの理由の1つです。
$ which test
/usr/bin/test
$ ls ~/bin/test
ls: cannot access bin/test: No such file or directory
$ touch ~/bin/test
$ chmod 755 ~/bin/test
$ which test
/home/daniel/bin/test
$
Bashを使用してシェルを更新する必要がないため、それ自体はwhich
とは関係ありません。他の変数が関係している必要があります。