【问题标题】:Pass environment variable to sudo将环境变量传递给 sudo
【发布时间】:2017-03-30 05:28:09
【问题描述】:

我必须将环境变量传递给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 命令。 有人可以帮我将环境变量传递给sudo,而无需在调用shell中使用export

【问题讨论】:

    标签: bash shell environment-variables sudo


    【解决方案1】:

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

    您可以在此处使用 shell:

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

    【讨论】:

    • 命令是在更大的上下文中动态创建的,sudo 的一个好处是可以直接附加要运行的实际命令,而无需引用。 -c 选项的问题是该命令必须被引用。你知道不需要引用的解决方案吗?
    • 如果我需要传递两个变量怎么办?
    猜你喜欢
    • 1970-01-01
    • 2013-12-29
    • 2021-09-05
    • 2020-03-27
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    相关资源
    最近更新 更多