$PATH 中的波浪字符('~')? (例如:PATH='~/bin':/usr/bin:/bin)
Tilde char ('~') in $PATH? (e.g.: 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
中我清除哈希后仍然可以找到 passh
table (hash -r
).
您在 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
根据我的测试,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
中我清除哈希后仍然可以找到 passh
table (hash -r
).
您在 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