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

Groovy脚本执行AWS Shell命令报错求助:美元符号语法问题

Groovy脚本Shell命令报错修复

错误原因

Groovy会解析双引号包裹的字符串中$开头的内容,将其视为自身的变量表达式。你命令里的$(date -d +10days)是Shell的命令替换语法,被Groovy误判为自身语法,从而触发报错。

修复后的命令

sh "aws ec2 describe-images --filters Name=name,Values=${params.KUBE_AMI_NAME} | jq -r '.Images[].ImageId' | xargs -I {} aws ec2 enable-image-deprecation --image-id '{}' --deprecate-at \$(date -d +10days)"

关键修改点

  • 转义Shell命令替换的$:把$(date...)改成\$(date...),让Groovy不解析该部分,直接传递给Shell执行命令替换
  • 修正xargs参数:移除-0(jq输出为每行一个ImageId,-0按null分隔不适用),并将-I aws改为-I {}(-I后需指定占位符,原写法错误)
  • 调整占位符引号:将--image-id "{}"改为--image-id '{}',避免Groovy解析双引号,同时保证Shell正确识别占位符

另一种写法(三重单引号字符串)

如果不想处理转义,可使用Groovy三重单引号包裹Shell命令,拼接Groovy变量:

sh '''aws ec2 describe-images --filters Name=name,Values=''' + "${params.KUBE_AMI_NAME}" + ''' | jq -r '.Images[].ImageId' | xargs -I {} aws ec2 enable-image-deprecation --image-id '{}' --deprecate-at $(date -d +10days)'''

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:32:56