2013-02-23 64 views
0

下一個bash腳本在crontab中調用。如何在bash中分支子shell時加載環境變量?

我在/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中獲取環境變量?我該如何解決它?

+0

如何從python.sh調用$ JOBCMD?或者如果這不適合,將env變量作爲參數傳遞給$ JOBCMD。 – suspectus 2013-02-23 11:31:35

+0

如果你不使用'export',你只是定義了shell變量,而不是環境變量。 – Barmar 2013-02-23 11:42:33

+0

所有的環境變量都是在/etc/profile.d/python.sh中定義的。 – 2013-02-23 12:06:10

回答

0
export JOBCMD=`/path/to/a_long_time_shell.py` 

應使其可用於所有新創建的進程。或者,甚至更好。您可以使用psutils按名稱查找流程,並以此方式處理它。將事情傳遞到環境中是IPC的一種奇怪的方式。

1

我可以看到這樣做的最簡單的方法是將變量導出python.sh

export a=123 
export b=234 

,而不是

a=123 
b=234 

我猜你在幹什麼。

或者,如果你知道你想要的變量,你可以調用腳本之前導出它們:

... 
. /etc/profile.d/python.sh 
export a 
export b 
$JOBCMD & 
...