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

Linux与Windows系统下jq 1.7命令执行行为差异及报错求助

解决Windows下jq命令执行报错的问题

问题根源是Windows命令提示符(CMD)和PowerShell的引号解析规则与Linux Bash不同,导致jq过滤器被拆分成了多个无效命令。以下是针对两种Windows环境的适配方案:

1. Windows命令提示符(CMD)适配命令

CMD仅识别双引号作为字符串边界,且内部双引号需要用\"转义,将整个jq过滤器用双引号包裹,确保参数完整传递:

aws dms describe-replication-tasks --filter Name=replication-task-id,Values=TASKNAME --output json | jq ".ReplicationTasks | .[] | .TableMappings |= fromjson | .ReplicationTaskSettings |= fromjson | delpaths([ [\"ReplicationTaskArn\"],[\"ReplicationTaskStartDate\"],[\"ReplicationTaskStats\"],[\"Status\"],[\"StopReason\"],[\"ReplicationTaskCreationDate\"],[\"ReplicationTaskSettings\",\"Logging\",\"CloudWatchLogGroup\"],[\"ReplicationTaskSettings\",\"Logging\",\"CloudWatchLogStream\"],[\"RecoveryCheckpoint\"]]) | .TableMappings |= tostring | .ReplicationTaskSettings |= tostring" > TASKNAME.json

2. PowerShell适配命令

PowerShell支持单引号作为"原样字符串",内部特殊字符不会被解析,直接将原Linux命令的jq过滤器用单引号包裹即可:

aws dms describe-replication-tasks --filter Name=replication-task-id,Values=TASKNAME --output json | jq '.ReplicationTasks | .[] | .TableMappings |= fromjson | .ReplicationTaskSettings |= fromjson | delpaths([ ["ReplicationTaskArn"],["ReplicationTaskStartDate"],["ReplicationTaskStats"],["Status"],["StopReason"],["ReplicationTaskCreationDate"],["ReplicationTaskSettings","Logging","CloudWatchLogGroup"],["ReplicationTaskSettings","Logging","CloudWatchLogStream"],["RecoveryCheckpoint"]]) | .TableMappings |= tostring | .ReplicationTaskSettings |= tostring' > TASKNAME.json

通用简化方案(跨环境兼容)

如果过滤器逻辑复杂,可将jq规则保存为单独文件(比如filter.jq),避免引号适配问题:
filter.jq内容:

.ReplicationTasks | .[] | .TableMappings |= fromjson | .ReplicationTaskSettings |= fromjson | delpaths([ ["ReplicationTaskArn"],["ReplicationTaskStartDate"],["ReplicationTaskStats"],["Status"],["StopReason"],["ReplicationTaskCreationDate"],["ReplicationTaskSettings","Logging","CloudWatchLogGroup"],["ReplicationTaskSettings","Logging","CloudWatchLogStream"],["RecoveryCheckpoint"]]) | .TableMappings |= tostring | .ReplicationTaskSettings |= tostring

然后在CMD/PowerShell/Linux中统一执行:

aws dms describe-replication-tasks --filter Name=replication-task-id,Values=TASKNAME --output json | jq -f filter.jq > TASKNAME.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:25:07