Linux 命令“which”无法在 Ubuntu 下的 NFS 路径上找到可执行文件

Linux 命令“which”无法在 Ubuntu 下的 NFS 路径上找到可执行文件

我注意到 Linux shell 命令“which”没有显示可执行文件,尽管它已经在搜索路径上。

更具体地说,我的 $PATH 包括 '~/.local/bin';可执行文件是 ~/.local/bin/charm。'which charm' 不返回任何内容,尽管我可以毫无问题地运行 'charm'。我正在使用 Ubuntu 16.04 和 bash

该问题取决于 Linux 发行版。如果我登录到另一台 RHEL 6.10 机器,则命令“which charm”对同一可执行文件有效。

该问题也可能与 nfs 挂载有关。在 Ubuntu 16.04 上,命令“which”似乎可以很好地处理本地磁盘上的可执行文件,例如,“which which”显示“/usr/bin/which”,但它找不到 nfs 路径上的可执行文件,我的“~/.local/bin”就是这种情况。

我在网上搜索,但找不到解释。有没有办法让 Ubuntu 下的命令“which”显示路径上所有已安装的可执行文件,包括 nfs 挂载?

谢谢!

答案1

您的$PATH包含~/.local/bin部分中的波浪号尚未扩展。bash每次都会动态地扩展它,但是which(至少在 Ubuntu 上)sh不会。

如果你想which查看其中的可执行文件,~/.local/bin你需要确保波浪号已展开变量PATH获取它。该字符串可能是由某个启动脚本~/.local/bin添加到您的。找到相关行并根据以下示例进行修复。PATH


注意:首先在新的 shell 中运行以下每个示例,这样您就可以观察(echo "$PATH")它每次如何独立地改变变量。

这不会扩展波浪符号(因为引用):

PATH="~/.local/bin:$PATH"

这会:

PATH=~/".local/bin:$PATH"

或这个:

PATH=~/.local/bin:$PATH

波浪线扩展规则有些复杂。考虑使用$HOME。示例:

PATH="$HOME/.local/bin:$PATH"
PATH="$PATH:$HOME/.local/bin"

要修复已建立的PATH变量,请将~其替换为以下内容$HOME

PATH="${PATH/\~/$HOME}"

相关内容