“ sh”环境不尊重PATH扩展,用户的本地PATH无效吗?

时间:2019-11-18 10:48:37

标签: bash path sh archlinux

$ 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"

“缺少某些东西,您必须找到它”,但是如果您不知道缺少什么,很难看清。

1 个答案:

答案 0 :(得分:3)

$ export -p |grep PATH
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:~/.local/bin"

具有文字~是错误的。它应该已经扩展到/home/user。当变量被分配时,外壳将展开~,但当它们被扩展时,外壳将不会膨胀。

$ foo=~ && echo $foo     # expanded at assignment
/home/user
$ foo='~' && echo $foo   # not expanded since the assignment is quoted
~

找到将~/.local/bin添加到$PATH的{​​{3}},并确保未引用~

错误:

PATH="$PATH:~/.local/bin"

右:

PATH=$PATH:~/.local/bin