我使用 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
因此
xlsx2csv
,您的~/.local/bin
文件夹中有可执行文件,该可执行文件已正确添加到$PATH
变量中(甚至两次,应该修复,但并不重要)。它在那里被正确识别为可执行文件,正如我们从 的输出中看到的那样
type -a xlsx2csv
,它列出了给定命令的所有类型/位置(可以是例如 shell 内置/函数/别名或可执行文件 - 类型help type
以获取更多信息)。但是,Bash 认为它可以找到
/usr/bin/xlsx2csv
,正如您在尝试调用它时在错误中看到的那样。这是 Bash(和其他 shell)使用内部哈希表来加速命令查找的结果。可能存在错误的条目,因为您之前在该位置有这样的可执行文件并运行它,但随后它被移动或卸载并重新安装到其他位置。
通常,当发生明显使其无效的事件时,例如当您更改
$PATH
变量时,Bash 会重置其哈希表。虽然它显然无法识别您的重新安装过程,但我们可以手动重置它:$PATH
上面的这个命令会重置 Bash 的命令哈希表并清除所有缓存的命令位置条目,强制它在您下次键入任何命令时定期查找。您只需键入即可查看当前哈希表hash
。有关更多信息,请键入 阅读其帮助help hash
。您还可以访问hash 命令的目的是什么?(Unix & Linux SE)了解更多关于 Bash 命令位置散列的信息。