在Groovy的Shell中运行循环命令

07_05_GuyT

我使用以下命令可以正常工作

def before(Map<String, String> params) {
  sh """

  make ${params.get('arg')}
  """
}

现在我需要对其进行一些修改以与循环一起运行,并且出现复杂错误

def before(Map<String, String> params) {
  sh """

  params.each{ k, v -> make ${v} }
  """
}

任何想法如何解决这个问题?我尝试添加{ }失败

希蒙·斯蒂芬尼克

您会看到一个编译错误,因为传递给sh步骤的字符串的正文包含bash无法识别的部分(此部分:)params.each{ k, v -> make ${v} }

您可以从不同的角度解决此问题:您可以将所有映射条目收集到make ${arg}命令列表中,并可以sh在使用换行符加入所有命令之后将其传递给step \n考虑以下示例:

def before(Map<String, String> map) {
    sh(map.collect { k,v -> "make ${v}" }.join("\n"))
}

before([arg1: "foo", arg2: "bar"])

sh步骤中执行的代码等效于以下内容:

sh """
    make foo
    make bar
"""

更新:在"""内执行多个命令

如果要应用前面显示在"""块中的解决方案,则可以尝试使用以下方法:

def before(Map<String, String> map) {
    sh """

    # Run any command beforehand 

    ${map.collect { k,v -> "make ${v}" }.join(" && ")}
    """
}

这种方法将使您可以将任何bash命令放在命令链执行之前

make foo && make bar && make 123 

您可以使用一个不同的连接器&&(例如\n,如上例所示)。但是,使用链接命令&&可能会更好,因为如果其中之一失败,则会阻止下一个命令运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章