Bash 拒绝执行正确的二进制文件

Max*_*Hax 1 filesystem bash latex 12.04

我已经安装了当前版本的 texlive (2012),它将其二进制文件安装到/usr/local/texlive/2011/bin/i386-linux/. 我随后通过修改/etc/environment文件将此目录添加到 PATH 变量,因为我希望为所有用户安装它:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/texlive/2012/bin/i386-linux"
Run Code Online (Sandbox Code Playgroud)

然后我继续删除texliveapt-suite 包,因为我在尝试编译.tex文档时遇到错误,该文档显示 texlive 2009 发行版与我的 Lubuntu 12.04 一起预先打包。

现在发生了一些非常奇怪的事情:

~ which pdflatex
/usr/local/texlive/2012/bin/i386-linux/pdflatex
Run Code Online (Sandbox Code Playgroud)

所以似乎正在找到二进制文件。尽管如此,还是会发生以下情况:

~ pdflatex foo.tex
/usr/bin/pdflatex: File not found!
Run Code Online (Sandbox Code Playgroud)

为什么它看起来 ìn /usr/bin/?这是bash二进制位置的某种内部缓存吗(我依稀记得听说过这个)?

什么是可能的修复?

Lek*_*eyn 7

Bash 确实为最近查找的程序提供了一个“缓存”。您可以使用hash -r在 shell 中清除此缓存。备择方案:

  • 只需关闭当前外壳并打开一个新外壳。
  • 提供完整路径,例如: /usr/bin/pdflatex file.tex

which是一个外部程序。它将始终将程序报告为在当前状态下匹配。要调查 shell 执行了哪个命令,请使用type内置命令。

缓存演示:

$ which acpidump
/usr/bin/acpidump
$ 类型 acpidump
acpidump 是 /usr/bin/acpidump
$ acpidump -h &>/dev/null # 触发查找
$ 类型 acpidump
acpidump 被散列 (/usr/bin/acpidump)
$ mv ~/bin/acpidump{.x,} # 使 acpidump 在 PATH 中可用
$ which acpidump 
/home/peter/bin/acpidump
$ 类型 acpidump 
acpidump 被散列 (/usr/bin/acpidump) 
$ hash -r                 # 清除缓存
$ 类型 acpidump 
acpidump 是 /home/peter/bin/acpidump