我的 PATH 变量似乎设置正确,但是不起作用

我的 PATH 变量似乎设置正确,但是不起作用

我使用 pip3 安装了一些程序 (xlsx2csv)。该软件的可执行文件位于~/.local/bin。我的$PATH定义~/.profile如下:

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

echo $PATH
/home/bruni/bin:/home/bruni/.local/bin:/home/bruni/bin:/home/bruni/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

可执行文件的权限似乎没问题:

bruni@bruni-Inspiron-5547:~/.local/bin$ ls -l
total 44
-rwxrwxr-x 1 bruni bruni 42501 Jul  2 12:39 xlsx2csv

bruni@bruni-Inspiron-5547:~/.local/bin$ type -a xlsx2csv 
xlsx2csv is /home/bruni/.local/bin/xlsx2csv
xlsx2csv is /home/bruni/.local/bin/xlsx2csv

尽管如此,如果不指定确切的路径,我就无法调用已安装的软件。

:~$ xlsx2csv
-bash: /usr/bin/xlsx2csv: No such file or directory

答案1

xlsx2csv因此,您的文件夹中有可执行文件~/.local/bin,它被正确添加到变量中$PATH(甚至两次,这应该是修复的,但并不重要)。

它在那里被正确识别为可执行文件,正如我们从输出中看到的那样type -a xlsx2csv,它列出了给定命令的所有类型/位置(例如,可以是 shell 内置/函数/别名或可执行文件 - 类型help type以获取更多信息)。

但是,Bash 认为它可以被找到为/usr/bin/xlsx2csv,正如您在尝试调用它时看到的错误一样。

这是因为 Bash(和其他 shell)使用内部哈希表来加速命令查找。可能是因为您之前在该位置有一个这样的可执行文件并运行了它,但后来它被移动或卸载并重新安装在其他位置,所以出现了错误的条目。

通常,当发生明显使哈希表无效的事件(例如当您更改变量时)时,Bash 会重置其哈希表。$PATH虽然它显然无法识别您的重新安装程序,但我们可以手动重置它:

hash -r

$PATH上述命令会重置 Bash 的命令哈希表并清除所有缓存的命令位置条目,从而强制它在下次键入任何命令时定期查找。hash只需键入即可查看当前哈希表。有关更多信息,请键入 阅读其帮助help hash。您还可以访问hash 命令的用途是什么?(Unix 和 Linux SE)有关 Bash 命令位置散列的更多信息。

相关内容