web-dev-qa-db-ja.com

「どの」プログラムが新しくインストールされたプログラムを表示するにはシェルの更新が必要ですか?

Linuxプログラムwhichで、パスにインストールされている新しいプログラムを表示するためにシェルを更新する必要があるのはなぜですか(たとえば、ターミナルでtcshと入力します)。

whichがはっきりと見ることができるusr/local/binの他のプログラムと同じ権限を持つプログラムにアクセスできない理由に戸惑いました。

誰かがこれが素人の言葉で私にどのように機能するかを説明できますか?

3
Jason R. Mick

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つです。

6
RedGrittyBrick
$ 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とは関係ありません。他の変数が関係している必要があります。

0