【问题标题】:OSX Yosemite - invalid characters in pathOSX Yosemite - 路径中的无效字符
【发布时间】:2015-01-21 17:51:08
【问题描述】:

我在安装 Homebrew 时遇到问题,并且看起来问题(UTF-8 (ArgumentError) 错误消息中的无效字节序列)是由于我的 PATH 中的错误造成的。当我运行 echo $PATH 时,我得到以下信息(请务必滚动到下面代码块的最右侧以查看故障):

/usr/local/mysql/bin:/opt/subversion/bin/:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:PATH=/usr/local/share/python:$PATH:PATH=/usr/local/share/npm/bin:$PATH:export PATH��:/usr/local/git/bin

我不知道 /usr/local/git/bin 路径之前的那些奇怪字符来自哪里。我正在使用 bash(尝试过 zshell,同样的问题)。我找不到这是从哪里来的。我的 .bash_profile 文件看起来也很干净。

【问题讨论】:

  • 无论把它们放在那里还有另一个错误——export 是命令的(通常是不必要的)部分,而不是值的一部分。该值建议您在发生这种情况时在本地安装 git。还有多个其他错误,您将PATH=$PATH 作为值的一部分。但如果无法访问您的文件,我们将无法进行故障排除。您是否手动编辑了您的.bashrc.profile呢?
  • 我可以通过编辑 ~/.bashrc 和 ~/.bash_profile 文件来获得它吗? .bashrc 是空白的,而 .bash_profile 有一堆由 macports 修改的东西。另外,如何使这些文件可供查看?
  • 您需要确定对 PATH 进行错误更改的位置。由于您使用的是bash,我建议您使用:bash -x -l(后跟exit)来查看您登录时发生的确切情况。看起来代码中可能有5次尝试设置PATH,并且其中4个是错误的。不过,您所看到的有点奇怪。你也可以试试echo "$PATH" | od -c,它会告诉你错误字符的字节值。
  • 要检查的另一件事:从 Finder 或 Dock 启动 AppleScript Editor(不以任何方式使用 shell),输入脚本 do shell script "env",然后单击运行。这将显示从 launchd 继承的环境,并受到任何 shell 初始化脚本的影响。看看那里是否也出现了问题。
  • 谢谢乔纳森。我运行了“bash -x -1”命令(虽然不确定如何使用“exit”来执行它)。我确实得到了很多结果,但我不确定如何解释这些结果。有什么方法可以让我发布结果吗?

标签: macos git bash path homebrew


【解决方案1】:

检查您的 ~/.profile~/.bash_profile~/.bashrc 文件。这些值也可能是在/etc/profile 或其他系统范围的文件中设置的,但错误的性质是这样的,我认为它们是您自己手动编辑个人文件的结果。您是决定您可能更改的内容和时间的最佳法官。

查找以下条目:

 PATH='/usr/local/share/python:$PATH'
 PATH='PATH=/usr/local/share/npm/bin:$PATH'
 PATH='export PATH��:/usr/local/git/bin'

它们应该看起来像

 PATH=/usr/local/share/python:$PATH
 PATH=/usr/local/share/npm/bin:$PATH
 PATH=$PATH:/usr/local/git/bin
 # Not strictly necessary -- PATH is already exported
 export PATH

看到模式了吗?这些都通过将PATH 设置为prefix:$PATH$PATH:suffix 来为PATH 添加一个值,其中新的前缀或后缀是您安装本地包的目录。新值应该是前缀还是后缀可能无关紧要-除非您尝试覆盖系统版本(例如,由于/usr/bin/git太旧而安装了/usr/local/git-那么,这很重要你的local 版本在PATH 中排在第一位)。第一次运行命令时,速度差异也很小;如果它位于PATH 的末尾,shell 必须在找到它之前查找更多位置。

引用的区别很明显——PATH=$PATH:suffix 扩展为 PATH 的旧值并添加了 :suffix,而 PATH='$PATH:suffix' 用文字字符串 $PATH 替换了 PATH 的旧值:suffix 已添加。你很幸运,这些都没有完全取代你原来的PATH,这将使你的shell基本上无法运行(至少直到你发现你必须使用/bin/ls而不仅仅是ls)。

【讨论】:

  • 感谢您的详尽解释。我想我的困惑(因为我对这一切都很陌生)是有太多文件可以设置这个路径变量。有先后顺序吗?因为我查看了 ~/.profile、~/.bash_profile 和 ~/.bashrc,这些文件都没有引用任何与 git 相关的内容。
  • @JonathanLeffler 的评论有很好的调试方法。最后,如果您无法确定错误值的来源,您可以在自己的启动文件中覆盖它们(.bashrc 应该涵盖大多数基础)。
  • 再次感谢您的帮助。我终于能够通过在“.bashrc”文件中覆盖它来解决这个问题。我很失望没有更多时间来探索@JonathanLeffler 的故障排除技巧。我确实花了一些时间来处理这些问题,虽然我没有找到问题的根本原因,但我确实了解了更多关于它是如何工作的。下一次,我会更加小心地进行实验。
  • 考虑到我在这方面的经验很少,我仍然很困惑,仍然有问题,并且真的可以使用一些帮助。我仍然在路径中看到无效字符,导致 Home Brew 之类的操作失败。我花了几个小时试图遵循给出的建议,但我缺乏真正理解我所看到的背景。除了 ~/.profile、~/.bash_profile 和 ~/.bashrc 文件之外,还有一些东西添加到我的路径中。我应该打开一个新问题吗?如果需要,我可以通过 Pastebin 提供更多信息。在这一点上,我已经束手无策了,所以任何帮助都将不胜感激。
  • 在挖掘了更多之后,似乎 OS X path_helper 导致了我的问题。在我的 /private/etc/profile 文件中,我只有两个 if 语句,它们似乎决定是使用 path_helper 还是 bashrc。我删除了该代码(使配置文件为空白)。现在,我的路径中不再有无效字符,Brew 现在运行良好。如果有帮助,我可以分享我从个人资料文件中删除的代码。
猜你喜欢
  • 2015-08-28
  • 2015-12-06
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
相关资源
最近更新 更多