2015-04-23 61 views
1

今天我只是鼓励一个奇怪的问题。zsh的奇怪行为PATH

我的环境是Mac OS X的优山美地,zsh的5.0.5(x86_64的 - 苹果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有什么问题?

感谢

+1

尝试'$ HOME'而不是'〜',并注意“composer”!=“.composer” –

+0

对不起,关于“composer”&“.composer”,这是一个错字,现在修复它 – DQM

+0

@WilliamPursell '$ HOME'技巧按预期工作。请将您的评论作为答案,我将标记为解决方案:) – DQM

回答

2

尝试使用的$HOME代替~。在许多情况下,当你期望它们时shell不会扩展~,通常使用$HOME会更好。 ~真的只是一个交互式使用的捷径。 (我记得唯一的情况是~是首选,在一个.gitalias中,扩展了变量,变量不是。)

1

类型rehash回升$PATH变化。

zsh user guide

命令的存储方式带来了其他后果。特别是,如果zsh 已经知道在哪里找到一个新命令,它将不会查找新命令。如果 我在上面的例子中在/usr/local/bin中输入了一个新的ls命令,zsh 将继续使用/bin/ls(假设它已被发现)。到 修复此问题,有命令rehash,其实际清空 命令散列表,以便查找命令再次从 从头开始划伤。的csh用户可能还记得不必键入rehash不少 用新的命令:它不是在zsh那么糟糕,因为如果没有命令 已经散列,或现有一个消失,zsh将 自动再次扫描路径;此外,如果$path被更改,则zsh自行执行rehash 。因此在$path的头部添加一个新的重复的 命令是 需要重新刷新的主要原因。

编辑然而@WilliamPursell可能是在一些与他的意见:

注意, “作曲家”= “.composer”

+0

@WilliamPursell的'$ HOME'技巧奏效,谢谢:) – DQM