bash - 'sh' 环境不尊重 PATH 扩展,用户的本地 PATH 无效?
问题描述
$ bl 1
$ sh -c 'bl 1'
sh: bl: command not found
该bl
脚本位于用户的 PATH 扩展名 ( /home/user/.local/bin
) 中,但sh
环境似乎并没有意识到它bash
。主要的/usr/bin/sh
可执行符号链接到/usr/bin/bash
.
放置一个/usr/local/bin
指向本地bl
脚本的符号链接似乎可以解决这个问题。手动扩展 PATH$ PATH=/usr/bin:$HOME/.local/bin sh -c 'bl 1'
也可以解决这个问题,因为 bash 和 sh 都知道 PATH,所以我不太明白。
$ export -p |grep PATH=
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:~/.local/bin"
$ sh -c 'export -p |grep PATH'
export PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:~/.local/bin"
“有些东西不见了,你必须找到它”,但如果你不知道丢失了什么,就很难看。
解决方案
$ export -p |grep PATH declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:~/.local/bin"
有文字~
是错误的。它应该已经扩展到/home/user
了。分配~
变量时,shell 将展开,但在展开变量时不会。
$ foo=~ && echo $foo # expanded at assignment
/home/user
$ foo='~' && echo $foo # not expanded since the assignment is quoted
~
找到添加到的shell 启动脚本并确保没有被引用。~/.local/bin
$PATH
~
错误的:
PATH="$PATH:~/.local/bin"
对:
PATH=$PATH:~/.local/bin