csh
我在使用 FreeBSD9作为 shell 时遇到了一个奇怪的问题。路径中新安装的程序只有在我重新启动csh
shell 时才会启动。我觉得这真的很烦人。
我猜csh
它会搜索路径一次,直到你退出它才会重新搜索它们。你如何强制它自我更新?你能放些什么东西.cshrc
让它停止这样做吗?(我习惯了 bash,在 bash 中我没有看到任何类似的事情发生。)
答案1
Unix C shell 会散列您的搜索路径目录,以帮助它更快地找到可执行文件。但是,如果在它已经完成散列之后向这些目录添加新的可执行文件,它就会出现盲点。解决方案是使用命令rehash
告诉它重建其散列。或者,您可以使用命令完全关闭路径散列(这会稍微影响性能)unhash
。
(Fwiw,我同意这是令人讨厌的行为。我在自己的汉密尔顿C壳,但我的足够智能,可以发现盲点并自动修复它们。)
答案2
如果您正在使用 的最新版本tcsh
(我目前有tcsh 6.20.00 (Astron) 2016-11-24
),您可以set autorehash
(例如在您的~/.cshrc
或在提示符下)在需要时启用“路径”目录的自动重新扫描(如 bash)。根据 tcsh 手册页:
autorehash (+)
If set, the internal hash table of the contents of the directories in the
path variable will be recomputed if a command is not found in the hash table.
In addition, the list of available commands will be rebuilt for each command
completion or spelling correction attempt if set to `complete' or `correct'
respectively; if set to `always', this will be done for both cases.
不过,也存在一些边缘情况,如rehash
tcsh 手册页的命令部分所述:
rehash Causes the internal hash table of the contents of the directories
in the path variable to be recomputed.
...
With autorehash, a new command will be found automatically, except
in the special case where another command of the same name
which is located in a different directory already exists in the
hash table. Also flushes the cache of home directories built
by tilde expansion.