根据我的测试,bash
对$PATH
~
非常满意,但/usr/bin/which
不是。 对此有什么标准(如POSIX(吗?
例:
[STEP 100] # echo $BASH_VERSION
4.4.12(1)-release
[STEP 101] # echo $PATH
/root/bin:/usr/sbin:/usr/bin:/sbin:/bin
[STEP 102] # /usr/bin/which passh
/root/bin/passh
[STEP 103] # type passh
passh is /root/bin/passh
[STEP 104] #
[STEP 105] # PATH='~/bin':/usr/sbin:/usr/bin:/sbin:/bin
[STEP 106] # echo $PATH
~/bin:/usr/sbin:/usr/bin:/sbin:/bin
[STEP 107] # /usr/bin/which passh
[STEP 108] # hash -r
[STEP 109] # hash
hash: hash table empty
[STEP 110] # type passh
passh is /root/bin/passh
[STEP 111] #
如我们所见,在步骤107中,which
无法再找到passh
,但在步骤110中,bash
在清除哈希表(hash -r
(后仍然可以找到passh
。
你在变量PATH
有这部分:'~/bin'
这里引用了~
,没有展开。这可以由bash
内置实用程序(如type
(处理,但which
是一个外部程序,不会扩展引用~
。
如果您希望~
展开,请将其保留在引号之外,如下所示:
PATH=~/bin:/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin
或使用$HOME
:
PATH="$HOME/bin":/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin