我在DigitalOcean上有服务器,我使用fabric来部署我的代码。我的代码依赖于环境变量(flask配置)。我今天遇到了一个奇怪的麻烦:在 /root/.bashrc 的服务器上我添加了下一行
export CONFIG=/path/to/conf
当我在远程控制台上执行时
>>> echo $CONFIG
>>> /path/to/conf # result, as it should be
但是在 fabfile 我有一个功能
def show():
run("echo $CONFIG")
它会打印一个空字符串。为什么? 提前谢谢!
答案 0 :(得分:1)
这不应该是这种情况,因为默认情况下Fabric使用-l
标志Make bash act as if it had been invoked as a login shell (see INVOCATION below).
我也无法重现您的问题:
$ fab -H home test_bash
[home] Executing task 'test_bash'
[home] run: grep FOO $HOME/.bashrc
[home] out: export FOO="BAR"
[home] out:
[home] run: echo $FOO
[home] out: BAR
[home] out:
所以我的猜测是你已经更改了env.shell
,或者你没有以root
用户身份进行连接,这是您设置此bash导出的位置。 (请注意,run()
与Fabric使用中的sudo()
不同)