我正在編寫一個嵌入了小型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是一個好習慣。 –