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

如何解决jq+bash生成AWS CLI命令时的「无效参数类型」错误?

解决S3路径列表批量下载的bash脚本错误

问题原因

你用jq '.[]'输出的S3路径是带双引号的字符串(比如"s3://bucket-name/path/to/file0.tif"),当bash读取这个值到source变量后,执行aws s3 cp "${source}" .时,实际传给aws的参数包含了外层的引号,变成了""s3://bucket-name/path/to/file0.tif"",导致aws无法识别正确的S3 URI,因此报错。而手动执行时,shell会自动解析引号,传递给aws的是纯路径,所以能成功。

修复方法

方法1:修改jq命令输出原始字符串

给jq加上-r(raw output)参数,让它输出不带引号的纯路径:

修改后的download.sh脚本:

#!/bin/bash

set -o errexit

while read -r source
do
    echo "Attempting to execute:"
    echo "aws s3 cp "${source}" ."

    aws s3 cp "${source}" .
done < <(cat sources.lst | jq -r '.[]')

方法2:用xargs简化脚本

如果不需要逐行打印日志,也可以用xargs直接批量执行,更简洁:

jq -r '.[]' sources.lst | xargs -I {} aws s3 cp {} .

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:17:05