在sudo语句中设置env变量-Linux shell

时间:2018-07-09 23:01:36

标签: linux bash environment-variables

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

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

然后,在sudo语句中(仅在此处),我需要将该值更改为“ DEF”。但是,将值设置为“ DEF”后,该值没有更改。回声命令返回“ 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 " [...]"

2 个答案:

答案 0 :(得分:2)

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

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

将变量扩展名引用到prevent globbing and splitting mishaps也是一个好主意:写"$VAR1"而不是$VAR1

(因为您有换行符,所以不需要分号。)

答案 1 :(得分:0)

尝试

export VAR1="ABC"

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

echo $VAR1;

正如John Kugelman指出的那样,应使用'而不是'来包装命令,以避免shell变量插值。此外,在命令内部引用VAR时,请使用"${}"而不是{{ 1}},这就是我的诀窍