我查看命令所在的位置:
xxx:~/mono/mono-2.6.7$ which mono
/usr/local/bin/mono
Run Code Online (Sandbox Code Playgroud)
如果我直接执行它,没问题:
xxx:~/mono/mono-2.6.7$ /usr/local/bin/mono -V
Mono JIT compiler version 2.6.7 (tarball Mon Aug 2 16:01:50 UTC 2010)
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
....
Run Code Online (Sandbox Code Playgroud)
但是如果我在没有路径的情况下执行命令,它就找不到它:
xxx:~/mono/mono-2.6.7$ mono
bash: /usr/bin/mono: No such file or directory
Run Code Online (Sandbox Code Playgroud)
/usr/bin 中没有单声道文件:
xxx:~/mono/mono-2.6.7$ ls -l /usr/bin/mono
ls: cannot access /usr/bin/mono: No such file or directory
Run Code Online (Sandbox Code Playgroud)
这是我的路径:
xxx:~/mono/mono-2.6.7$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)
它不是搜索由冒号分隔的每个目录吗?那么它不应该在 /usr/local/bin 中找到 mono 吗?
如果我以 root 身份登录,它就可以工作。我可以在命令行上执行 mono 并找到它。权限是:
xxx:~/mono/mono-2.6.7$ ls -l /usr/local/bin/mono
-rwxr-xr-x 1 root root 8452592 2010-08-02 16:23 /usr/local/bin/mono
Run Code Online (Sandbox Code Playgroud)
我使用的用户不属于正确的组吗?
Bash 将命令位置的缓存保存在内存中,这样它就不必在每次启动命令时都进行整个 PATH 探索。在你原来的bash会议,庆典以前记住这mono是/usr/bin/mono。然后您删除/usr/bin/mono并添加了/usr/local/bin/mono,但是您正在运行的 bash 在其缓存中仍然具有旧位置。
您可以使用hash内置命令操作命令位置缓存。特别是hash -r清除缓存。
which是一个外部命令,所以它不使用 bash 的缓存并且每次都执行 PATH 查找。您也可以使用type,它是一个内置函数,因此确实使用了查找缓存。
| 归档时间: |
|
| 查看次数: |
4500 次 |
| 最近记录: |