2016-10-11 54 views
2

我的遠程服務器(192.168.3.68)包含在我的〜/ .bashrc中設置幾個環境變量:fabfile沒有看到遠程環境變量

# For instance 
export MY_DATABASE_HOST=127.0.0.1 

當我把run('echo $MY_DATABASE_HOST')fabfile.py,它表明:

[192.168.3.68] run: echo $MY_DATABASE_HOST 
[192.168.3.68] output: 

Done 
Disconnecting from 192.168.3.68... done. 

我試過在echo之前加上run('source ~/.bashrc')但沒有任何變化。

爲什麼在〜/ .bashrc中設置的環境變量對fabfile不可見?

我該如何解決這個問題,因爲fabfile必須能夠讀取這些變量?

UPDATE

from fabric.context_managers import prefix 

# This didn't work 
with prefix('source /home/meandme/.bashrc'): 
    run('echo $MY_DATABASE_HOST') 
# This didn't work either 
run('source /home/meandme/.bashrc && echo $MY_DATABASE_HOST') 
+0

這並沒有工作... – smarber

回答

0

run每個呼叫將打開一個新的外殼,在run先前調用的任何瞬態命令將有可能丟失(例如,如設置一個環境變量)。爲了這個的Elid問題,你可以做兩件事情:

正是如此寫您的shell命令:

run('source /path/to/.bashrc && echo $MY_DATABASE_HOST') 

或使用事實上的.bashrc執行prefix上下文管理

from fabric.context_managers import prefix 
with prefix('source /path/to/.bashrc'): 
    run('echo $MY_DATABASE_HOST') 
+0

這並不工作更詳細的答案,我已經用盡全力... – smarber

+0

帖子更新的代碼沒有工作,然後。 – 2ps

+0

對於調試,你可以嘗試添加'run('cat /home/meandme/.bashrc')'到開始檢查輸出嗎? – 2ps