'sh' 环境不尊重 PATH 扩展,用户的本地 PATH 没有生效?
'sh' environment does not respect the PATH extensions, user's local PATH not in effect?
$ 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"
"Something's missing and you have to find it"但是如果你不知道缺少什么,就很难看。
$ 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 startup script,其中 ~/.local/bin
添加到 $PATH
并确保 ~
未被引用。
错误:
PATH="$PATH:~/.local/bin"
右:
PATH=$PATH:~/.local/bin
$ 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"
"Something's missing and you have to find it"但是如果你不知道缺少什么,就很难看。
$ 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 startup script,其中 ~/.local/bin
添加到 $PATH
并确保 ~
未被引用。
错误:
PATH="$PATH:~/.local/bin"
右:
PATH=$PATH:~/.local/bin