首页 > 解决方案 > '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"

“有些东西不见了,你必须找到它”,但如果你不知道丢失了什么,就很难看。

标签: bashpathsharchlinux

解决方案


$ 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

推荐阅读