波浪号字符 ('~') 在$PATH?(例如:PATH='~/bin':/usr/bin:/bin)



根据我的测试,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

相关内容

  • 没有找到相关文章

最新更新