如何将环境变量导出到使用sudo运行的后台进程?

时间:2018-09-01 14:06:29

标签: linux bash environment-variables sudo environment

我有一个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设置的环境变量。

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

1 个答案:

答案 0 :(得分:2)

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