首页 > 解决方案 > 在 sudo 语句中设置环境变量 - Linux shell

问题描述

我需要在 sudo 语句中修改环境变量。sudo 语句包含一些说明。

在示例中,我将环境变量VAR1设置为值“ABC”。

然后,在 sudo 语句中(并且仅在此处),我需要将该值更改为“DEF”。但是在我将值设置为“DEF”后,该值没有改变。Echo 命令返回“ABC”作为 VAR1 的值。

如何在 sudo 语句中更改/设置变量的值?

这是我运行的代码示例:

#!/bin/bash
export VAR1="ABC"

sudo -u <user> -i sh -c "
         export VAR1="DEF";
         echo $VAR1;
"

echo $VAR1;

额外信息:我尝试了 sudo 的选项 -E,以在 sudo 调用时保留环境变量(来源:https ://unix.stackexchange.com/questions/337819/how-to-export-variable-for- use-with-sudo/337820),但结果没有改变:

#env VAR1="DEF" sudo -u <user> -E -i sh -c " [...]"

标签: linuxbashenvironment-variables

解决方案


使用单引号来防止外壳插值$VAR1。您需要$VAR1传递到内壳,以便它可以扩展它。

sudo -u <user> -i sh -c '
         export VAR1="DEF"
         echo "$VAR1"
'

引用变量扩展来防止通配和拆分事故也是一个好主意:用 write"$VAR1"而不是$VAR1.

(分号不是必需的,因为你有换行符。)


推荐阅读