如何在buildbot的shell命令行中添加“ &&”?

Di *_*Liu 5 shell command-line buildbot

我需要使用“ &&”一步执行多个命令。所以我创建工厂如下:

f1 = factory.BuildFactory()
f1.addStep(shell.ShellCommand, command=["sh", "-c", "pwd", "&&", "cd", "/home/xxx/yyy", "&&", "pwd"])
Run Code Online (Sandbox Code Playgroud)

但是在执行过程中,发现buildbot对其进行了如下处理,这使得无法执行

sh -c pwd '&&' cd /home/xxx/yyy '&&' pwd
Run Code Online (Sandbox Code Playgroud)

我所期望的是

sh -c pwd && cd /home/xxx/yyy && pwd
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?谢谢。

kon*_*box 7

由于您/bin/sh无论如何都在使用,只需用一个字符串调用它:

f1.addStep(shell.ShellCommand, command="pwd && cd /home/xxx/yyy && pwd")
Run Code Online (Sandbox Code Playgroud)

正如文档所说:

ShellCommand 参数是:

命令

指定要运行的命令的字符串列表(首选)或单个字符串(不鼓励)。首选字符串列表,因为它可以直接用作 argv 数组。使用单个字符串(带有嵌入的空格)需要 buildslave 将字符串传递给 /bin/sh 进行解释,这引发了关于如何转义或解释 shell 元字符的各种难题。

不推荐这样做,但无论如何您仍然需要 shell,因为&&它只能在 shell 中解释。打电话sh只会是多余的。

  • @DiLiu 尝试不将它作为数组的单个元素传递,而是作为字符串传递。见更新。我想我只是误解了“字符串列表(首选)或单个字符串(不鼓励)”。 (2认同)