将变量从Python传递到Bash


问题内容

我正在写一个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中传递出去,然后将eval其传递到bash中。

一个例子是

#!/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

问题答案:
  1. 除非使用 Python 对原始数据进行某种操作,否则无需导入任何内容。答案可能很la脚:

    myvar=$(python - <<< "print 'second'") ; echo $myvar
    
  2. 假设出于某种原因,需要 Python 吐出一堆bash变量和赋值,或者(谨慎地)即时编写代码。一种eval方法:

    myvar=first
    

    eval $(python - <<< “print(‘myvar=second’)” )
    echo $myvar