我有一个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
设置的环境变量。
那么,在这种情况下如何将环境变量导出到后台进程?
答案 0 :(得分:2)
出于安全原因,通常sudo会将当前环境替换为新用户的环境。使用sudo -E
保留调用环境。或者,您可以在命令行sudo NAME=jake
上传递变量。