su - user -c env 在没有添加 -l 的情况下无法获取环境变量

su - user -c env 在没有添加 -l 的情况下无法获取环境变量

我现在遇到一个问题,我不明白发生了什么,因为我对 Linux 很陌生。

我正在尝试运行一个脚本(我不会发布它,因为我认为我不被允许这样做),它需要以 root 用户身份运行,但是当我运行它时,它说它不运行没有所需的环境变量,需要设置它。但脚本应该这样做。

我们把它安装在两个盒子上,一个工作正常,另一个则不行。当我们在工作框上运行此命令时:
su - user -l -c env 2>/dev/null | grep 'ENVVARIABLE=' | awk -F= '{print $2}'
它返回正确的路径。

如果我在另一个盒子上运行它,它不会返回任何结果。但是,如果我切换 -l 和 -l ,它会返回正确的路径。

有人能指出我这里出了什么问题的正确方向吗?不幸的是,我不能只升级盒子上的所有东西来看看是否可以解决问题。但如果我能缩小范围,那将会有很大帮助,因为目前我没有任何线索。如果您需要更多信息,希望我可以提供(尽管可能必须在下周)。

注意:在实际脚本中,-l 根本不存在:
if [ "$myself" = "root" ];然后
ENVVARIABLE=`su - $user -c env 2>/dev/null | grep 'ENVVARIABLE=' | awk -F= '{print $2}'
fi

编辑 1:两个机器上的用户使用相同的 shell (bash)

答案1

警告:Linux 上的 su 在所有系统上可能并不相同。像往常一样,man su应该给你答案你的选项和版本。

传播环境的条件:

  1. 通过命令导出变量export ENVVARIABLE
  2. su 被告知保留环境,这里(Debian 9)可以使用选项 -m、-p、--preserve-environment 来完成。

所以这在这里有效:

su -m - user -c env 2>/dev/null | grep 'ENVVARIABLE=' | awk -F= '{print $2}'

相关内容