我使用 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 命令位置散列的更多信息。