我需要在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 " [...]"
答案 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}},这就是我的诀窍