如何使用 sudo 将环境变量导出到后台进程 运行?
How to export environment variable to background process run using 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
.
我有一个 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
.