gpt4 book ai didi

linux - 在 groovy 脚本中更改文件扩展名时执行 shell 命令时出现意外标记 '.'

转载 作者:太空宇宙 更新时间:2023-11-04 09:58:04 26 4
gpt4 key购买 nike

我正在尝试在 .groovy 脚本中运行以下命令:

sh """#!/bin/bash -ex
find .. -name "*.gcda" | \
xargs -I {} sh -c 'file=${0}; echo "${file%.*}".gcno' {} | \
xargs -I {} sh -c 'gcov {} -o "\$(dirname {})"' \\;
"""

这不是最漂亮的命令,但我找到了一个 .gcda 文件名列表,将这些字符串更改为具有 .gcno 扩展名,然后最终运行.gcno 版本文件名上的命令。

我得到的错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 92: unexpected token: . @ line 92, column 60.
h -c 'file=${0}; echo "${file%.*}".gcno'
^

1 error

当我在终端中运行此命令时它工作正常,当我在 Jenkins 中执行它时它只是提示。我尝试逃避一些事情,但无法弄清楚。

最佳答案

这里有一个更简单的方法来重现您的问题:

unexpected token: . @ line 1, column 14.
""" echo ${1%.} """
^

发生这种情况是因为 Groovy 双引号字符串中的 ${..} 用于字符串插值。相反,您希望 Groovy 不理会它们,以便 shell 可以解释它们。

您可以使用三重单引号来做到这一点,因为 Groovy 不会在其中进行字符串插值(但与 bash 本身不同,它仍然解释反斜杠):

sh '''#!/bin/bash -ex
find .. -name "*.gcda" | \
xargs -I {} sh -c 'file=${0}; echo "${file%.*}".gcno' {} | \
xargs -I {} sh -c 'gcov {} -o "$(dirname {})"' \\;
'''

关于linux - 在 groovy 脚本中更改文件扩展名时执行 shell 命令时出现意外标记 '.',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58546905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com