'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将展开~,但当它们被展开时,shell不会展开。

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

找到将~/.local/bin添加到$PATH的shell启动脚本,并确保未引用~

错误:

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

右:

PATH=$PATH:~/.local/bin

最新更新