Jor*_*tle 1 bash templates json jq
我目前正在使用jq1pass CLI 尝试将随机生成的密码创建到安全笔记中。我在设置字段时遇到问题。
这是我的两个变量。我总共需要设置 8 个。
section0_section_uuid="Section_0"
section1_section_uuid="Section_1"
Run Code Online (Sandbox Code Playgroud)
这是我操作模板的命令。我首先阅读它,更改第一个标题,然后将其保存到$template. 然后我通过$template成jq
template=$(cat template.json | jq --arg uuid "$section0_section_uuid" '.sections[0].title=$uuid')
template=$($template | jq --arg uuid "$section1_section_uuid" '.sections[1].title=$uuid')
echo $template
Run Code Online (Sandbox Code Playgroud)
我收到“文件名太长”。我认为我没有正确传递修改后的模板变量。我需要对template.json文件再做 7 次修改。
编辑:
这是我试图操纵的完整模板。我必须对模板进行 12 次更改。12 个中的 10 个是我将生成的随机数。12 个中的其余 2 个将是生成的用户名。
{
"fields": [],
"sections": [
{
"fields": [
{
"k": "concealed",
"n": "[CHANGE_ME]",
"t": "ROOT_USER_PASS",
"v": "[CHANGE_ME]"
},
{
"k": "concealed",
"n": "[CHANGE_ME]",
"t": "DEV_USER_PASS",
"v": "[CHANGE_ME]"
}
],
"name": "Section_[CHANGE_ME]",
"title": "Container SSH"
},
{
"fields": [
{
"k": "string",
"n": "[CHANGE_ME]",
"t": "placeholdertext",
"v": "[CHANGE_ME_LETTERS]"
},
{
"k": "string",
"n": "[CHANGE_ME]",
"t": "placeholdertext",
"v": "[CHANGE_ME_LETTERS]"
},
{
"k": "concealed",
"n": "[CHANGE_ME]",
"t": "placeholdertext",
"v": "[CHANGE_ME]"
}
],
"name": "Section_[CHANGE_ME]",
"title": "MySQL"
}
]
}
Run Code Online (Sandbox Code Playgroud)
为什么不让你的模板成为一个真正的jq过滤器,而不是一个 JSON blob 来修改呢?
的内容template.jq是
{
sections: [
{ title: $t1 },
{ title: $t2 },
{ title: $t3 },
{ title: $t4 },
{ title: $t5 },
{ title: $t6 },
{ title: $t7 },
{ title: $t8 }
]
}
Run Code Online (Sandbox Code Playgroud)
那么你的命令就是
$ jq -n --arg t1 foo --arg t2 bar ... -f template.jq
{
"sections": [
{
"title": "foo"
},
{
"title": "bar"
},
...
]
}
Run Code Online (Sandbox Code Playgroud)
这样做的好处之一是您不会意外忘记一个值;jq如果您为所有 8 个变量提供定义,则只能处理过滤器。