我正在编写一个 bash 脚本,其中嵌入了一个小的 python 脚本。我想将一个变量从 python 传递给 bash。经过几次搜索,我只找到了基于os.environ.
我只是无法让它发挥作用。这是我的简单测试。
#!/bin/bash
export myvar='first'
python - <<EOF
import os
os.environ["myvar"] = "second"
EOF
echo $myvar
Run Code Online (Sandbox Code Playgroud)
我预计它会输出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
Run Code Online (Sandbox Code Playgroud)
除非使用Python对原始数据进行某种操作,否则不需要导入任何东西。答案可能很蹩脚:
myvar=$(python - <<< "print 'second'") ; echo "$myvar"
Run Code Online (Sandbox Code Playgroud)
假设由于某种原因需要Python吐出一堆bash变量和赋值,或者(小心地)即时编写代码。一个eval方法:
myvar=first
eval "$(python - <<< "print('myvar=second')" )"
echo "$myvar"
Run Code Online (Sandbox Code Playgroud)