【问题标题】:'sh' environment does not respect the PATH extensions, user's local PATH not in effect?'sh' 环境不尊重 PATH 扩展,用户的本地 PATH 无效?
【发布时间】:2020-03-13 17:17:51
【问题描述】:
$ 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"

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

【问题讨论】:

  • 您可以发布“PATH”和whereis cp 以便其他人了解您的设置吗?
  • 您的PATH 变量是否标记为导出?运行export -p | grep PATH=
  • @dash-o @cbley Cp 位于/usr/bin/cpexport -p |grep PATH 的输出对于 bash 和 sh 是不同的; bash 输出:$ export -p |grep PATH declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:~/.local/bin" 和 sh 输出:export -p |grep PATH declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:~/.local/bin"
  • 你的外壳是什么?是 'bash' 还是 'dash' 还是别的什么?
  • 看起来不错(我想/~/.local/bin 部分只是一个错字?!)也许$HOME 没有指向正确的位置?请运行sh -c 'echo $HOME' 并将输出添加到您的问题中(在 cmets 中真的很难阅读)。您也可以尝试手动设置 PATH 并查看它是否有效:PATH=/usr/bin:$HOME/.local/bin sh -c 'bl 1'

标签: bash path sh archlinux


【解决方案1】:
$ 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
~

找到~/.local/bin 被添加到$PATHshell startup script,并确保~ 没有被引用。

错误:

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

对:

PATH=$PATH:~/.local/bin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2014-02-24
    • 2023-03-21
    • 2018-05-08
    • 2020-05-03
    相关资源
    最近更新 更多