使用Fabric 1.6.0设置$PATH变量

4 投票
1 回答
1995 浏览
提问于 2025-04-17 19:47

我正在尝试在远程服务器上运行一个我已经安装在自己家目录里的命令。这个命令已经被添加到我的 $PATH 变量中,也就是在 .bash_profile 文件里设置的。当我通过正常的 ssh 会话远程登录时,我可以使用这个命令,但 Fabric 似乎没有读取我的 $PATH。因此,我尝试使用 Fabric 的 path 上下文管理器 来将它添加到我的 $PATH,像这样:

def test_path():
    print('My env.path setting: %(path)s' % env)
    with path('/path/to/sources/drush'):
        run('echo $PATH')
        run('drush')

但是 Fabric 给出的回应是:

Executing task 'test_path'
My env.path setting:
run: echo $PATH
out: /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
out:

run: echo $PATH
out: /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/path/to/sources/drush
out:

run: drush
out: /bin/bash: drush: command not found
out:

Fatal error: run() received nonzero return code 127 while executing!

Requested: drush
Executed: /bin/bash -l -c "export PATH=\"\$PATH:\"/path/to/sources/drush\" \" && drush"

Aborting.

谢谢你的关注...

1 个回答

2

问题出在PATH变量的设置方式上——它的末尾多了一个空格:

/bin/bash -l -c "export PATH=\"\$PATH:\"/path/to/sources/drush\" \" && drush"
                                                                ^HERE

在搜索路径中最后一个目录被bash解释为"/path/to/source/drush "(末尾有空格)——这是一个无效的目录。

撰写回答