【问题标题】:Weird behaviour with zsh PATHzsh PATH 的奇怪行为
【发布时间】:2015-04-23 10:11:26
【问题描述】:

我只是鼓励今天使用 zsh 解决一个奇怪的问题。

我的环境是 Mac OS X Yosemite,zsh 5.0.5 (x86_64-apple-darwin14.0)

在 .zshrc 中,我手动将 PATH 变量设置为类似

export PATH="$PATH:~/.composer/vendor/bin"

在终端尝试echo $PATH,结果如预期(包含~/.composer/vendor/bin)。然后尝试从~/.composer/vendor/bin 执行一个二进制文件,它总是会返回“zsh: command not found”错误。

尝试切换到bash,echo $PATH也和预期一样,结果和zsh shell一样。 尝试从~/.composer/vendor/bin 执行一个二进制文件,没有发现问题。似乎 PATH var 在 bash shell 上运行良好。

我的 zsh shell 出了什么问题?

谢谢

【问题讨论】:

  • 尝试$HOME 而不是~,并注意 "composer" != ".composer"
  • 对不起“composer”和“.composer”,这是一个错字,现在修复它
  • @WilliamPursell $HOME 技巧按预期工作。请将您的评论作为答案,我将标记为解决方案:)

标签: zsh osx-yosemite zshrc


【解决方案1】:

尝试使用$HOME 而不是~。在许多情况下,shell 不会像您期望的那样扩展~,通常最好使用$HOME~ 实际上只是为了作为交互式使用的捷径。 (我能回忆起首选~ 的唯一情况是在.gitalias 中,其中~ 被扩展而变量没有。)

【讨论】:

  • 非常感谢您对many years later in a way newer macOS version 的帮助。 bash 正确解析路径中的波浪线,但 zsh 没有。经过数小时的研究和反复试验,您的帖子终于帮助了我,我在 PATH 中的自定义用户脚本再次被考虑用于自动完成和正确执行。谢谢!
【解决方案2】:

输入 rehash 以获取 $PATH 更改。

来自zsh user guide

命令的存储方式还有其他后果。特别是zsh 如果它已经知道在哪里可以找到新命令,则不会寻找新命令。如果 我在上面的例子中在/usr/local/bin 中放了一个新的ls 命令,zsh 将继续使用/bin/ls(假设它已经被发现)。至 解决这个问题,有命令rehash,它实际上清空了 命令哈希表,以便查找命令再次从 刮。 csh 的用户可能记得必须输入很多 rehash 使用新命令:zsh 并没有那么糟糕,因为如果没有命令 已经散列,或者现有的消失了,zsh 将 再次自动扫描路径;此外,zsh 执行重新哈希 如果$path 被更改,它会自行决定。所以添加一个新的副本 命令某处朝向$path 的头部是 需要重新散列。

编辑但是@WilliamPursell 的评论可能会有所作为:

注意 "composer" != ".composer"

【讨论】:

  • @WilliamPursell 的 $HOME 技巧奏效了,无论如何谢谢 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 2021-03-10
  • 1970-01-01
  • 2015-06-20
  • 2012-02-13
  • 1970-01-01
相关资源
最近更新 更多