如何解决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
相关产品推荐
相关产品推荐

