如何在bash中为子shell加载环境变量?

0 投票
2 回答
2002 浏览
提问于 2025-04-17 16:51

下面这个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 &
...

撰写回答