bash不尊重$ PATH?

时间:2013-03-29 12:05:22

标签: bash

在OS X 10.8.3下,有这样的环境:

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.
$ echo $PATH
/Users/r/Desktop/Beryl/usr/bin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:~/bin:/usr/local/bin:/usr/X11R6/bin

$ {PATH}中irbwhich个副本,$ which -a irb /Users/r/Desktop/Beryl/usr/bin/irb /usr/bin/irb 正确报告:

irb

但是当我运行$ irb --version irb 0.9.5(05/04/13) # this is the wrong version $ /Users/r/Desktop/Beryl/usr/bin/irb --version irb 0.9.6(09/06/30) $ /usr/bin/irb --version irb 0.9.5(05/04/13) 时,我希望得到/ Users / r / Desktop / Beryl / usr / bin / irb;相反,我得到/ usr / bin / irb:

#!/bin/sh
export PATH=/Users/r/Desktop/Beryl/usr/bin:${PATH}
exec /bin/bash

我没有任何别名。我应该提一下,我通过执行这个脚本启动了bash:

{{1}}

无论如何,为什么bash没有在$ PATH中运行第一个实例?

2 个答案:

答案 0 :(得分:2)

可能是导致问题的哈希。当您第一次运行程序时,它会读取PATH,但随后bash会将该位置保存在内部哈希中。它将随后(在同一会话中)使用此哈希,而不管$PATH的值。

使用hash命令列出现有位置。

您可以使用hash -r清除哈希值。

编辑:另请参阅关联数组BASH_CMDS

答案 1 :(得分:2)

使用以下命令确定执行irb的位置:

type irb

要使bash shell忘记所有记住的位置,请使用:

hash -r

bash shell似乎将irb的先前位置保存在内部哈希中。

在此处查看有关bash中哈希的详细信息:http://linux.about.com/library/cmd/blcmdl1_hash.htm