我想aws
在管道中使用命令行应用程序,但这似乎不可能。
一个有效的例子是:
$ aws ecs register-task-definition --cli-input-json file://./mytask.json
但是以下方法不起作用:
$ cat ./mytask.json \
| aws ecs register-task-definition --cli-input-json file:///dev/stdin
Error parsing parameter 'cli-input-json': Invalid JSON: Expecting value: line 1 column 1 (char 0)
JSON received:
$ aws ecs register-task-definition --cli-input-json file://<(cat ./mytask.json)
Error parsing parameter 'cli-input-json': Invalid JSON: Expecting value: line 1 column 1 (char 0)
JSON received:
答案1
暂时找到了一个使用 xargs 的解决方法,非常干净:
cat ./mytask.json \
| xargs -0 aws ecs register-task-definition --cli-input-json
它仅添加xargs -0
和需要 --cli-input-json
作为最后的论点
答案2
答案3
我能够将 JSON 作为变量传递--cli-input-json
并注入 bash 变量。
所以你的例子应该是:
aws ecs register-task-definition --cli-input-json "$(cat < ./mytask.json)"
在我目前的情况中,我有:
根据需要传递 JSON
aws autoscaling start-instance-refresh --cli-input-json "$(cat < ./options.json )"
或者作为 HEREDOC 来传递其他变量。(不是要求但可能有用)
asg_nominal_name=AutoScalingGroupName
aws autoscaling start-instance-refresh --cli-input-json "$(cat <<JSON
{
"AutoScalingGroupName": "${asg_nominal_name}",
"Preferences": {
"InstanceWarmup": 300,
"MinHealthyPercentage": 100
}
}
JSON
)"
我不太熟悉用 bash 术语解释为什么。请随意。
答案4
就我的情况而言,这是文件编码问题。将文件保存为不带 BOM 的 UTF-8 格式,然后就可以正常工作了。
如果您使用 Sublime Text,请转到文件->使用编码保存->UTF-8。
在 VS Code 中,在 VS Code 的底部栏中,您会看到标签“UTF-8 with BOM”。单击它打开操作栏并选择“使用编码保存”。选择 UTF-8 并保存文件。