【发布时间】:2018-07-09 23:01:35
【问题描述】:
我需要修改环境变量在 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 " [...]"
【问题讨论】:
-
sudo env VAR1="DEF" sh -c '...'可能会少一些麻烦——你不必担心让你的定义eval-safe,如果你试图从不受信任的来源传递数据,这肯定是一个问题到以升级权限运行的脚本。虽然这当然不能解决双引号导致早期扩展的问题——您确实需要为您的脚本使用单引号(与没有sudo相同;sh -c "foo=bar; echo $foo"总是坏的,sudo或否) . -
@jww 嗯?问题中有一个 MCVE。
标签: linux bash environment-variables