使用Fabri嵌套cd调用时出现意外行为

2024-04-18 12:24:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用Fabric(Ubuntu 13.04上的1.7.0版)时遇到了一些问题。你知道吗

考虑这个函数:

def does_not_work():
  with cd('/absolute/folder/one/'):
    with prefix('change_path_command'):
      with cd('/absolute/folder/two/'):
        run('some_random_command')

我希望它执行与以下命令相同的命令:

def works():
  run('cd /absolute/folder/one/ && change_path_command && cd /absolute/folder/two/ && some_random_command')

但是,这里是fab does_not_work的结构输出:

Requested: some_random_command
Executed: /bin/bash -l -c "cd /absolute/folder/two/ && change_path_command && some_random_command"

似乎嵌套cd给我带来了麻烦。你知道吗

有什么好的解释吗?你知道吗


Tags: pathdefwithnotcdrandomsomefolder
1条回答
网友
1楼 · 发布于 2024-04-18 12:24:27

当您调用^{} context manager^{} context manager时,它们实际上并不运行命令,它们只是修改一些影响run()和/或sudo()的任何后续调用的本地环境设置。你知道吗

因此,当执行run('some_random_command')时,它会在(cd=/folder/oneprefix=change_path_commandcd=/folder/two的上下文中运行,由于内部的cd优先于外部的cd,因此最终结果是使用cd /folder/two && change_path_command && some_random_command执行单个命令。你知道吗

看一下^{}^{}的源代码,更好地了解它们的工作原理—它们最终要做的就是在进入和退出时修改字典fabric.state.env。这些函数稍后应用于对^{}的调用中,该函数通过_run_command()函数从run()sudo()调用。你知道吗

相关问题 更多 >