开发者社区 问答 正文

jenkins pipeline shell 执行带通配符语句会被加单引号

def removePath = "/home/ljx/*jar"
echo removePath
sh "/bin/rm -f  ${removePath}"

执行结果

/home/ljx/*jar
/bin/rm -f  '/home/ljx/*jar'

最终结果导致执行无效,求解决方案,尝试过 eval

展开
收起
渣渣先 2020-09-12 17:58:04 2288 分享
分享
版权
举报
阿里云 AI 助理回答

在Jenkins Pipeline脚本中,你遇到的问题是因为通配符*在双引号字符串中没有被正确展开。当你直接将含有通配符的路径赋值给变量并在shell命令中使用时,Jenkins不会自动展开这个通配符。为了解决这个问题,你可以使用Groovy的文件查找功能来获取匹配的所有文件路径,然后在shell命令中遍历这些路径进行删除。下面是一个可能的解决方案:

def removePath = "/home/ljx/*.jar"
echo "Pattern: ${removePath}"

// 使用findFiles方法找到匹配的文件
def filesToDelete = findFiles(glob: removePath)

// 检查是否找到文件
if (filesToDelete) {
    // 遍历找到的文件并执行删除操作
    filesToDelete.each { file ->
        sh(script: "/bin/rm -f '${file.path}'")
    }
} else {
    echo "No files found matching the pattern."
}

这段脚本首先定义了要删除的文件模式(注意这里使用了.jar而不是*jar,因为通常我们指的是所有.jar文件)。然后,它使用findFiles步骤来查找与模式匹配的所有文件,并将结果存储在一个列表中。如果找到了文件,就遍历这个列表,对每个文件执行删除操作;如果没有找到文件,则输出一条消息告知没有找到匹配的文件。

这样处理可以确保通配符正确地在Groovy层面展开,并且能够安全地处理文件名中可能包含特殊字符的情况。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答