我查看命令位于何处:
xxx:~/mono/mono-2.6.7$ which mono
/usr/local/bin/mono
如果我直接执行,没有问题:
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
....
但是如果我执行没有路径的命令,它就找不到它:
xxx:~/mono/mono-2.6.7$ mono
bash: /usr/bin/mono: No such file or directory
/usr/bin 中没有 mono 文件:
xxx:~/mono/mono-2.6.7$ ls -l /usr/bin/mono
ls: cannot access /usr/bin/mono: No such file or directory
这是我的路径:
xxx:~/mono/mono-2.6.7$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
它不是搜索每个以冒号分隔的目录吗?那么它不应该在 /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
我使用的用户不属于正确的组吗?
答案1
Bash 在内存中保留命令位置的缓存,这样它就不必在每次启动命令时都进行整个 PATH 探索。在最初的 bash 会话中,bash 之前已记住了mono
。/usr/bin/mono
然后您删除/usr/bin/mono
并添加了/usr/local/bin/mono
,但正在运行的 bash 的缓存中仍保留了旧位置。
您可以使用内置命令来操作命令位置缓存hash
。特别是hash -r
清除缓存。
which
是一个外部命令,因此它不使用 bash 的缓存,并且每次都会执行 PATH 查找。您也可以使用type
,它是内置命令,因此会使用查找缓存。
答案2
也许你有一个别名是否已为 mono 定义?检查主目录中的以下文件:.bashrc,。轮廓,。登录或者.bash_配置文件
...不包含这样的内容
alias mono="/usr/bin/mono"
这也可以位于在 /etc/bashrc 中或者/etc/配置文件。
命令别名显示所有当前定义的别名。
答案3
我退出后重新登录,一切正常。我肯定做了什么蠢事。但是,一切正常!