在 Fabric 2/Invoke 中:更改目录并使用 sudo

mog*_*goh 8 python fabric

这工作得很好

@task
def foo(context):
    with context.cd('/'):
        context.run('pwd')
Run Code Online (Sandbox Code Playgroud)

输出:

/
Run Code Online (Sandbox Code Playgroud)

但这不会:

@task
def bar(context):
    with context.cd('/'):
        context.sudo('pwd', password='mysecretpassword')
Run Code Online (Sandbox Code Playgroud)

输出:

[sudo] password: sudo: cd: Befehl nicht gefunden
Run Code Online (Sandbox Code Playgroud)

如何让第二个示例运行?

mog*_*goh 4

事实证明,这是调用中的一个尚未修复的错误。

https://github.com/pyinvoke/invoke/issues/459

编辑:

这是我现在的解决方法:

context.sudo('bash -c cd "/ && pwd"')