这就是我想要做的。
我有一个A.sh脚本,其中包含导出它们的环境变量(例如export AEnv==1234
)。
然后我有B.sh调用A.sh:
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
ROOT_DIR="$SCRIPT_DIR/.."
. ${SCRIPT_DIR}/A.sh
然后我有一个.bat脚本,我执行B.sh.在它下面我执行我的Python脚本。在我的Python脚本中,我正在寻找环境变量AEnv
。但它给了我以下错误:
File "C:\Python27\lib\os.py", line 425, in __getitem__
return self.data[key.upper()]
KeyError: 'AEnv'
我正在使用os.environ['AEnv']
据我所知,当B.sh完成后,环境变量不再存在,因此失败。
我错过了什么?
答案 0 :(得分:0)
我不确定 bat script 的含义,但无论如何,你必须处理两个问题:
(1)虽然您基本上可以以您喜欢的任何方式命名环境变量,但您应该仅使用大写字母,以避免可移植性问题。也就是说,您的环境变量应命名为AENV。
(2)正确识别后,您无法将环境变量从一个进程“传输”到另一个进程,除非另一个进程是设置环境变量的进程的子进程。因此,您需要将值存储在其他位置。以下三种可能性是常见的方法:
定义环境变量值的过程可以将名称和值输出到stdout。调用脚本捕获输出并在其自己的环境中设置变量。调用Python脚本时,变量将在那里。
生成脚本将环境变量的值写入文件,Python程序从文件中提取它。
“继续传递样式”:主脚本不调用A.sh 和 Python程序,但只调用A.sh,并传递调用Python进程到A.sh的行(作为参数或通过环境)。 A.sh设置环境,调用Python程序,并将Python程序的退出代码传递给调用者。
答案 1 :(得分:0)
将export AEnv==1234
更改为export AEnv=1234
bat-file
永远不会知道A.sh.的环境设置。
尝试从B.sh
调用您的Python:
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
ROOT_DIR="$SCRIPT_DIR/.."
. ${SCRIPT_DIR}/A.sh
echo "After calling A.sh: AEnv=${AEnv}"
python C/Python27/lib/os.py