我正在编写一个嵌入了小型python脚本的bash脚本。我想从python传递一个变量到bash。经过几次搜索,我只找到了基于os.environ
的方法。将变量从Python传递到Bash
我只是不能让它工作。这是我的简单测试。
#!/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
你的Python脚本不能改变bash的环境(在此变量MYVAR)。 – Cyrus
为什么当你想运行python代码时创建bash脚本?使用BASH语法或Python。你需要的不是编程的工作方式。 –
注意事项 - 假设您希望您的Python源代码按原样使用(不受bash shell的参数扩展,命令替换等),则必须将heredoc分隔符用引号括起来,如“EOF”。这不会影响您示例中的代码,但这对于融入heredocs是一个好习惯。 –