如何在bash中为子shell加载环境变量?
下面这个bash脚本是在定时任务(crontab)中调用的。
我在/etc/profile.d/python.sh文件中定义了一些Python的环境变量。
$JOBCMD是一个会运行很长时间的Python脚本,所以我希望这个脚本能通过分叉(fork)来调用。
#!/bin/sh
. /etc/profile.d/python.sh
JOBCMD=`/path/to/a_long_time_shell.py`
if [ -z "$variable" ]; then
(
. /etc/profile.d/python.sh
$JOBCMD &
)
fi
exit 0
结果是$JOBCMD无法获取/etc/profile.d/python.sh中的环境变量?我该怎么做才能解决这个问题呢?
2 个回答
0
export JOBCMD=`/path/to/a_long_time_shell.py`
应该让它对所有新创建的进程可用。更好的方法是,你可以使用psutils通过名称找到这个进程,然后以那种方式对它做一些操作。把东西放进环境里是一种比较奇怪的进程间通信方式。
1
我觉得最简单的方法就是在 python.sh
文件中导出变量:
export a=123
export b=234
而不是
a=123
b=234
我想你可能是这样做的。
或者,如果你知道自己想要哪些变量,可以在调用脚本之前先导出它们:
...
. /etc/profile.d/python.sh
export a
export b
$JOBCMD &
...