我的远程服务器(192.168.3.68)包含在〜/ .bashrc中设置的几个环境变量:
# 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.
我尝试在回显之前立即添加run('source ~/.bashrc')
,但没有任何变化。
为什么〜/ .bashrc中的设置环境变量对fabfile不可见?
我该怎么做才能解决这个问题,因为fabfile必须能够读取这些变量?
更新
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 :(得分:1)
实际上执行了bashrc。但它被停止了,因为它没有以交互方式运行:
case $- in
*i*) ;;
*) return;;
esac
现在,我将环境变量移到了bashrc的顶部。
答案 1 :(得分:0)
run
的每次调用都将打开一个新的shell,因此run
的先前调用中的任何瞬态命令都会丢失(例如,设置环境变量)。要避免这个问题,你可以做两件事:
这样编写shell命令:
run('source /path/to/.bashrc && echo $MY_DATABASE_HOST')
或使用prefix
上下文管理器
from fabric.context_managers import prefix
with prefix('source /path/to/.bashrc'):
run('echo $MY_DATABASE_HOST')