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

AWS SSM RunShellScript参数解析报错:预期','却收到']'

问题解决:AWS SSM批量更新实例脚本错误修复

错误原因分析

  1. $?被替换为252:本地Shell执行脚本时,会自动解析$?这个特殊变量,将其替换为最近一次执行命令的退出状态码(这里是252),而非把变量原封不动传递给远程实例的Shell处理。
  2. 参数解析报错:--parameters中的命令包含分号、空格等特殊字符,AWS CLI的解析器会把分号当作命令分隔符,导致后续内容被误判为新的命令参数,引发格式错误。

修复方案

方案1:使用JSON格式定义参数(推荐)

JSON格式能明确界定参数边界,避免特殊字符解析错误,同时保留$?让远程实例处理:

aws ssm send-command --instance-ids "$y" --document-name AWS-RunShellScript --parameters '{"commands": ["yum -y update", "needs-restarting -r", "if [ $? -eq 1 ]; then exit 194; fi"]}' --cloud-watch-output-config "CloudWatchOutputEnabled=true"

方案2:转义特殊变量并正确包裹参数

通过转义$?为\$?,同时用双引号包裹整个commands值,防止本地Shell解析变量,也避免AWS CLI误判参数:

aws ssm send-command --instance-ids "$y" --document-name AWS-RunShellScript --parameters commands="yum -y update; needs-restarting -r; if [ \$? -eq 1 ]; then exit 194; fi" --cloud-watch-output-config "CloudWatchOutputEnabled=true"

方案3:用单引号包裹完整commands参数

单引号会阻止本地Shell解析任何变量和特殊字符,直接将命令原封不动传递给SSM:

aws ssm send-command --instance-ids "$y" --document-name AWS-RunShellScript --parameters 'commands=yum -y update; needs-restarting -r; if [ $? -eq 1 ]; then exit 194; fi' --cloud-watch-output-config "CloudWatchOutputEnabled=true"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:45:43