我正在编写一个 Bash 脚本,其中嵌入了一个小的 Python 脚本。我想从 Python 传递一个变量到 Bash。在搜索了一些后,我只找到了基于 os.environ
的方法。
我无法让它工作。这是我的简单测试:
#!/bin/bash
export myvar='first'
python - <<EOF
import os
os.environ["myvar"] = "second"
EOF
echo $myvar
我原以为它会输出
second
,但它仍然输出first
。我的脚本有什么问题?另外,是否有任何方法可以在不使用export
的情况下传递变量?
摘要
感谢所有的回答。这是我的总结。嵌入在Bash中的Python脚本将作为子进程运行,根据定义无法影响父Bash环境。
解决方案是从Python中传递赋值字符串,并在随后在Bash中进行
eval
。一个例子是:
#!/bin/bash
a=0
b=0
assignment_string=$(python -<<EOF
var1=1
var2=2
print('a={};b={}'.format(var1,var2))
EOF
)
eval $assignment_string
echo $a
echo $b
'EOF'
。这不会影响您示例中的代码,但这是使用heredocs时养成的好习惯。 - Chris Johnson