相关疑难解决方法(0)

为什么不使用“哪个”?那用什么?

当寻找的路径,可执行文件或检查,如果你在Unix shell中输入命令的名称会发生什么,有不同的公用事业过多(whichtypecommandwhencewherewhereiswhatishash,等)。

我们经常听说which应该避免。为什么?我们应该用什么来代替?

shell history which portability

422
推荐指数
4
解决办法
7万
查看次数

如何清除 Bash 的可执行文件路径缓存?

当我在没有指定可执行文件的完整路径的情况下执行程序时,Bash 必须搜索其中的目录$PATH才能找到二进制文件,似乎 Bash 会记住某种缓存中的路径。例如,我安装了从源代码到 的 Subversion 版本/usr/local,然后svnsync help在 Bash 提示符下键入。Bash 找到了/usr/local/bin/svnsync“svnsync”的二进制文件并执行了它。然后当我删除 Subversion 中的安装/usr/local并重新运行时svnsync help,Bash 响应:

bash: /usr/local/bin/svnsync: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但是,当我启动一个新的 Bash 实例时,它会找到并执行/usr/bin/svnsync.

如何清除可执行文件路径的缓存?

bash cache executable

319
推荐指数
4
解决办法
9万
查看次数

Bash 没有找到程序,即使它在我的路径上

我的路上有一个程序。程序在使用指定的完整路径执行时运行。但是当我只用它的名字运行它时,找不到该程序。

本质上,我想了解以下输出是如何可能的,以及如何修复它,以便在没有指定完整路径的情况下实际上可以找到我的程序:

root:/usr/local/bin# ./siege
****************************************************
siege: could not open /usr/local/bin/etc/siegerc
run 'siege.config' to generate a new .siegerc file
****************************************************
root:/usr/local/bin# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
root:/usr/local/bin# siege
bash: /usr/bin/siege: No such file or directory
root:/usr/local/bin# wtf!?!?
Run Code Online (Sandbox Code Playgroud)

我在 Ubuntu 12.04 上使用 bash。另请注意,siege 的警告输出与此问题的目的无关,因为我只对是否可以找到并调用该程序感兴趣。

bash path

29
推荐指数
1
解决办法
2万
查看次数

安装的程序可执行文件从错误的位置运行

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

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

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

user$ which parcellite
/usr/local/bin/parcellite

user$ parcellite -h
bash: /usr/bin/parcellite: No such file or directory
Run Code Online (Sandbox Code Playgroud)

$PATH 如下

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

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

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
Run Code Online (Sandbox Code Playgroud)

我安装了旧版本的parcellite。但我在安装新版本之前将其删除。


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

bash ubuntu path gnome-shell parcellite

5
推荐指数
1
解决办法
421
查看次数