【发布时间】:2020-08-27 10:37:38
【问题描述】:
我有这个带有服务帐户的 service-accounts-list.txt 文件:
serviceAccount:p12345-001@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount:p12345-002@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount:p12345-003@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount:p12345-004@gcp-sa-logging.iam.gserviceaccount.com
serviceAccount:p12345-005@gcp-sa-logging.iam.gserviceaccount.com
还有这个我想将数据附加到的results.json 文件:
{
"access": [
{
"role": "WRITER",
"specialGroup": "projectWriters"
},
{
"role": "OWNER",
"specialGroup": "projectOwners"
},
{
"role": "READER",
"specialGroup": "projectReaders"
}
]
}
预期结果:我想为service-accounts-list.txt 中的每一行添加一个对象,如下所示:
{
"access": [
{
"role": "WRITER",
"specialGroup": "projectWriters"
},
{
"role": "OWNER",
"specialGroup": "projectOwners"
},
{
"role": "READER",
"specialGroup": "projectReaders"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-001@gcp-sa-logging.iam.gserviceaccount.com"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-002@gcp-sa-logging.iam.gserviceaccount.com"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-003@gcp-sa-logging.iam.gserviceaccount.com"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-004@gcp-sa-logging.iam.gserviceaccount.com"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-005@gcp-sa-logging.iam.gserviceaccount.com"
}
]
}
到目前为止,我的 bash 脚本如下所示:
while read p;
do
cat result.json | jq --arg email "$p" '.access += [{"role": "WRITER", "userByEmail": $email}]' > result.json
done < service-accounts-list.txt
生成的result.json 文件实际上是空的。如果我将输出重定向到example > result2.json,它会正确添加最后一个服务帐户,如下所示:
{
"access": [
{
"role": "WRITER",
"specialGroup": "projectWriters"
},
{
"role": "OWNER",
"specialGroup": "projectOwners"
},
{
"role": "READER",
"specialGroup": "projectReaders"
},
{
"role": "WRITER",
"userByEmail": "serviceAccount:p12345-005@gcp-sa-logging.iam.gserviceaccount.com"
}
]
}
所以看来jq 语法是正确的。我尝试添加 --unbuffered 标志无济于事。
我错过了什么?
【问题讨论】:
-
为了您的方便,ShellCheck自动检测this等常见问题。
-
非常感谢您的提示。这对于像我这样的 bash 脚本新手很有用