You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy脚本中通过bash执行curl时&符号转义失效导致请求参数异常的问题

解决Groovy中执行curl命令时&参数被忽略的问题

这个问题的核心是bash对URL中&符号的解析冲突,以及你之前用的HTML转义符&完全不被bash和服务端认可,导致at参数根本没被正确传递。下面给你两个可靠的解决方案:

方案一:用单引号包裹URL,避免bash解析特殊字符

bash会把未转义的&当作“后台执行命令”的分隔符,所以我们可以把整个URL用单引号括起来,让bash把它当作一个完整的参数。在Groovy里用单引号多行字符串(''')来定义命令,避免Groovy的字符串转义干扰:

descr = ''' curl --silent -k -u test:test 'https://bitbucket/rest/api/1.0/projects/test/repos/test/pull-requests?state=all&at=refs/heads/release/test' | /usr/bin/core_perl/json_pp '''
def descrtxt = ['bash', '-c', descr].execute()
descrtxt.waitFor()

// 可以打印输出和错误信息调试
println descrtxt.text
println descrtxt.err.text

方案二:在Groovy字符串中正确转义&

如果你习惯用双引号多行字符串,需要在&前面加两个反斜杠(\\&)——第一个反斜杠是Groovy用来转义第二个反斜杠的,这样bash最终收到的命令里会是单个\&,从而把&当作URL的一部分:

descr = """ curl --silent -k -u test:test "https://bitbucket/rest/api/1.0/projects/test/repos/test/pull-requests?state=all\\&at=refs/heads/release/test" | /usr/bin/core_perl/json_pp """
def descrtxt = ['bash', '-c', descr].execute()
descrtxt.waitFor()

为什么之前的方法无效?

你用的&是HTML的转义字符,bash和Bitbucket的API都不认识它——服务端收到的参数会是state=all&at=...,相当于把&at当成了一个无效参数名,自然不会过滤指定分支的PR,所以返回了所有状态的结果。

内容的提问来源于stack exchange,提问作者stevemayster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:13:11