繁体   English   中英

在sudo语句中设置环境变量-Linux Shell

[英]Set env variable inside sudo statement - Linux shell

我需要在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 " [...]"

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

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

引用变量扩展名也是一个好主意,以防止出现故障和分裂事故 :写"$VAR1"而不是$VAR1

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

尝试这个

export VAR1="ABC"

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

echo $VAR1;

正如John Kugelman指出的那样,应使用'而不是'来包装命令,以避免shell vars插值。此外,在命令中引用VAR时,请使用"${}"代替$ ,这就是解决问题的方法我

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM