将环境变量传递给sudo

6

我必须将一个环境变量传递给sudo,但我一直没有成功,并且不知道如何让它起作用:

$sudo TEST=MY_TEST --user=myuser --login echo "$TEST"
$

输出是空的,但是export显示了以下内容:
$sudo TEST=MY_TEST --user=myuser --login export
...
declare -x TEST="MY_TEST"
...

环境变量不应该在调用shell中声明,而应该在本地声明,并直接传递给sudo命令。有人能否帮我在不使用调用shell中的export的情况下将环境变量传递给sudo

1个回答

7

由于您在变量扩展中使用了双引号"$TEST",扩展会在sudo命令运行之前发生,因此echo看到的参数为空,因为变量扩展已经导致空字符串。

您可以在这里利用shell:

% sudo TEST=MY_TEST sh -c 'echo "$TEST"'              
MY_TEST

该命令是在更大的上下文中动态创建的,sudo 的一个好处是可以直接附加要运行的实际命令,而无需引用。 -c 选项的问题在于必须引用命令。您知道是否有不需要引用的解决方案吗? - Herr-Herner
如果我需要传递两个变量怎么办? - LOrD_ARaGOrN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接