首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安装的程序可执行程序从错误的位置运行。

安装的程序可执行程序从错误的位置运行。
EN

Unix & Linux用户
提问于 2018-10-09 03:37:45
回答 1查看 821关注 0票数 5

我在Ubuntu中安装了parcellite (从http://parcellite.sourceforge.net/下载)

在从源代码安装sudo make install之后,我可以看到它安装在下面的位置。

但是,当我尝试运行它时,它尝试从另一条路径运行它。为什么会这样呢?

代码语言:javascript
复制
user$ which parcellite
/usr/local/bin/parcellite

user$ parcellite -h
bash: /usr/bin/parcellite: No such file or directory

$PATH如下所示

/home/user/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

我尝试更改可执行文件的所有权,如下所示。但问题依然存在。

代码语言:javascript
复制
user$ ls -l /usr/local/bin/parcellite 
-rwxr-xr-x 1 root root 452K Oct  7 21:00 /usr/local/bin/parcellite
user$sudo chown user:user /usr/local/bin/parcellite
user$ ls -l /usr/local/bin/parcellite 
-rwxr-xr-x 1 user user 452K Oct  7 21:01 /usr/local/bin/parcellite

我安装了一个旧版本的parcellite。但在安装新版本之前,我删除了它。

更新:@Fox的解决方案有效。但是,知道为什么which命令给出了正确的路径,尽管hash没有被更新?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-10-09 03:46:04

如果您安装了一个版本,然后在其他地方安装了另一个版本,那么您的shell将缓存(散列)原始路径。您可以使用hash -r清除此缓存。然后,下次运行该命令时,它将使用新路径重新散列。

请注意,此缓存不是全局缓存,如果您有几个正在运行的shell,则必须更新每个shell。

至于为什么which看到正确的路径,“为什么不使用which是一个很好的信息来源,但简单的回答是,which是一个外部命令,它看不到shell的路径缓存。

票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/474116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档