关于linux:如何使用sudo将环境变量导出到后台进程?

How to export environment variable to background process run using sudo?

本问题已经有最佳答案,请猛点这里访问。

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

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

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

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

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

1
2
3
4
5
#!/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中得到如下输出:

1
2
3
inside env_setter script.....
jake
Inside tester script...

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

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


通常情况下,当前replaces sudo环境与环境的新用户的安全性。使用sudo -E呼叫乐团,保护环境。或者你可以通过在命令行参数,sudo NAME=jake