如何使用sudo将环境变量导出到后台进程? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用sudo将环境变量导出到后台进程? [重复]相关的知识,希望对你有一定的参考价值。

我有一个bash脚本env_setter.sh。它设置了一个环境变量。它包含:

#!/bin/bash
echo "inside env_setter script....."
export NAME="jake"

我有另一个脚本tester.sh。它尝试打印由env_setter.sh设置的环境变量的值。它包含:

#!/bin/bash
echo "Inside tester script..."
echo "$NAME"

然后我有一个脚本runner.sh执行上述两个脚本如下:

#!/bin/bash
echo "Inside runner script..."
. ./env_setter.sh
echo "$NAME"
sudo nohup ./tester.sh > demo.log 2>&1 & echo $! > save_pid.pid

现在,当我运行runner.sh时,我在demo.log中得到以下输出:

inside env_setter script.....
jake
Inside tester script...

我们可以看到,tester.sh中的最后一个echo命令不会打印任何内容。这是因为我们使用env_setter.sh设置的环境变量未在tester.sh的上下文中导出。

那么,在这种情况下,如何将环境变量导出到后台进程?

答案

通常,出于安全原因,sudo会将当前环境替换为新用户的环境。使用sudo -E来保留调用环境。或者您可以在命令行sudo NAME=jake上传递变量。

以上是关于如何使用sudo将环境变量导出到后台进程? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

sudo命令

5Linux系统编程环境变量

如何将许多变量和函数从全局环境导出到 foreach 循环?

linux如何切换到root用户和更改环境变量

linux sudo 命令

使用sudo时如何保留环境变量