如何加上「&&&引用;在buildbot的shell命令行中?

如何加上「&&&引用;在buildbot的shell命令行中?,shell,command-line,buildbot,Shell,Command Line,Buildbot,我需要使用“&&”在一个步骤中执行多个命令。因此,我创建工厂如下: f1 = factory.BuildFactory() f1.addStep(shell.ShellCommand, command=["sh", "-c", "pwd", "&&", "cd", "/home/xxx/yyy", "&&", "pwd"]) 但在执行过程中,我们发现buildbot的处理过程如下,这使得它无法执行 sh -c pwd '&&' cd /home/

我需要使用“&&”在一个步骤中执行多个命令。因此,我创建工厂如下:

f1 = factory.BuildFactory()
f1.addStep(shell.ShellCommand, command=["sh", "-c", "pwd", "&&", "cd", "/home/xxx/yyy", "&&", "pwd"])
但在执行过程中,我们发现buildbot的处理过程如下,这使得它无法执行

sh -c pwd '&&' cd /home/xxx/yyy '&&' pwd
我所期望的是

sh -c pwd && cd /home/xxx/yyy && pwd

谁能帮我摆脱这个困境?谢谢。

既然您使用的是
/bin/sh
,只需使用一个字符串即可:

f1.addStep(shell.ShellCommand, command="pwd && cd /home/xxx/yyy && pwd")
正如文件所说:

ShellCommand参数包括:

命令

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


不推荐使用它,但您仍然需要shell,因为
&&
仅在shell中解释。调用
sh
是多余的。

制作一个脚本来包装这些命令,然后从代码中调用脚本如何?谢谢你的评论,肯特。我现在将命令放入脚本中。它现在可以工作了。我试了一下,发现这个带“&&”的命令会被解释为
'pwd&&cd/home/xxx/yyyy&&pwd'
,而不是
pwd&&cd/home/xxx/yyy&&pwd
。所以它不会起作用。我怀疑buildbot是否以特殊的方式对待像“&&”这样的字符。无论如何,谢谢。@DiLiu尝试将其作为字符串而不是数组的单个元素传递。请参阅更新。我想我只是误解了
字符串列表(首选)或单个字符串(不推荐)
。你是对的。我试过了,你更新的命令运行正常。非常感谢你的帮助。这不是假设奴隶身上有壳吗?这在windows build slave上的行为如何?@qneill那么您应该使用字符串列表
sh
pwd
必须存在于windows计算机上。我只能想象这个软件是如何工作的,所以也许你可以试试
命令=[“C:/Path/To/sh.exe”、“-C”、“pwd&&cd/home/xxx/yyy&&pwd”]
。如果您试图使其可移植,这将是很困难的,因为即使您决定使用
cmd.exe
而不是
sh.exe
,语法和路径形式也会不同。这实际上取决于您希望如何实现命令。此外,发布另一个关于它的问题已经是合法的,因为它已经是关于在不同平台上运行的。