【问题标题】:Why is my PATH ignored?为什么我的 PATH 被忽略了?
【发布时间】:2016-06-20 04:20:03
【问题描述】:

虽然我的 Unix PATH 包含 /Library/TeX/texbin,但我的 PATH 的这个组件似乎被忽略了。例如,当我尝试

pdftex --version

我明白了

-bash: pdftex: 找不到命令

同时

/Library/TeX/texbin/pdftex --version

按预期工作。

同样,

where -a pdftex

没有结果。

我的 PATH 是从两个来源构建的:/private/etc/paths,其中包含

/Users/Rax/.cabal/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Users/Rax/bin

以及/private/etc/paths.d/40-XQuartz/private/etc/paths.d/TeX中的另外两个文件,分别包含

/opt/X11/bin

/Library/TeX/texbin

这 3 个文件一起产生预期的 PATH

$ echo $PATH
/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin

其他目录中的所有条目都按预期找到(包括/opt/X11/bin 中的条目),但最后一个条目似乎被忽略了(至少在定位可执行文件时)。

为什么我的 PATH 的一部分被忽略了?如何确保它不是,以便按预期找到那里的可执行文件?


OS X 10.11.3

【问题讨论】:

  • 大概which pdftex 产生“路径中没有pdftext”?这将排除在路径中较早的目录之一中以该名称命名的东西以一种模糊的方式出现的稍微模糊的可能性。
  • 你试过了吗? hash -r
  • $PATH 中是否有任何非打印字符?试试printf "%q\n" "$PATH" 看看会显示什么。
  • @ChrisKitching: which -a pdftex 什么也没产生。
  • 看起来 $PATH 的末尾有一个空格,它将被视为文件名的一部分。检查 /private/etc/paths.d/TeX 看看里面是否有杂散空间。

标签: macos bash unix path osx-elcapitan


【解决方案1】:

这在 cmets 中得到了解决,但我将作为记录的答案发布:问题是由于 PATH 中的一个不可见字符,它被解释为实际目录名称的一部分。具体来说,它的末尾是一个空格,但您可以从许多其他隐形字符中获得相同的效果。 (我其实是在猜测paths.d 中的一个文件是DOS/Windows 文本格式,并且在行尾有一个回车。)

要让不可见的字符更显眼,可以使用printfcat -vet

$ printf "%q\n" "$PATH"
/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin\ 
$ echo "$PATH" | LC_ALL=c cat -vet
/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin $

注意printf 输出末尾的\ -- 它实际上后面跟着一个空格,但您必须推断 -- 以及cat -vet 输出中$ 之前的空格。顺便说一句,将对$PATH 的引用放在双引号中非常重要,因为没有它们,空间就会被修剪。

如果它是一个回车,它会是这样的:

$ printf "%q\n" "$PATH"
$'/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin\r'
$ echo "$PATH" | LC_ALL=c cat -vet
/Users/Rax/.cabal/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/Rax/bin:/opt/X11/bin:/Library/TeX/texbin^M$

在这种情况下,printf 将回车显示为\r(并将整个内容包装在$' ... ' 中以指示应解释转义),而cat -vet 将其显示为^M

【讨论】:

    猜你喜欢
    • 2013-09-30
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 2022-12-23
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    相关资源
    最近更新 更多