![su - user -c env 在没有添加 -l 的情况下无法获取环境变量](https://linux22.com/image/130474/su%20-%20user%20-c%20env%20%E5%9C%A8%E6%B2%A1%E6%9C%89%E6%B7%BB%E5%8A%A0%20-l%20%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E6%97%A0%E6%B3%95%E8%8E%B7%E5%8F%96%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png)
我现在遇到一个问题,我不明白发生了什么,因为我对 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
应该给你答案你的选项和版本。
传播环境的条件:
- 通过命令导出变量
export ENVVARIABLE
- su 被告知保留环境,这里(Debian 9)可以使用选项 -m、-p、--preserve-environment 来完成。
所以这在这里有效:
su -m - user -c env 2>/dev/null | grep 'ENVVARIABLE=' | awk -F= '{print $2}'