Was*_*des 1 command-line string base64 jq
我有以下basic.json文件:
{
"user": "user",
"pass": "password"
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将其编码为 Base64,如下所示:
"Basic dXNlcjpwYXNzd29yZA=="
Run Code Online (Sandbox Code Playgroud)
我想我已经很接近了:
echo Basic $(echo $(cat basic.json | jq '.user'):$(cat basic.json | jq '.pass') | base64)
Run Code Online (Sandbox Code Playgroud)
我使用了此处找到的 jq 访问方法。
我使用了此处找到的 base64 方法。
但结果是错误的:
Basic InVzZXIiOiJwYXNzd29yZCIK
Run Code Online (Sandbox Code Playgroud)
我已经尝试过-e文章中提到的标志:
echo Basic $(echo $(cat basic.json | jq '.user'):$(cat basic.json | jq '.pass') | base64 -e)
Run Code Online (Sandbox Code Playgroud)
但它会抛出这个错误:
base64:无效选项 -- 'e'
我哪里搞错了?
提前致谢。
我的解决方案
命令是这样结束的:
RUN echo "map \"\" \$basicAuth {\n\
\tdefault $(jq '"Basic " + ("\(.user):\(.pass)" | @base64)' basic.json);\n\
}" > basic.conf
Run Code Online (Sandbox Code Playgroud)
我的basic.conf文件终于有了正确的基本身份验证:
map "" $basicAuth {
default "Basic dXNlcjpwYXNzd29yZA==";
}
Run Code Online (Sandbox Code Playgroud)
谢谢你们
jq提供了许多输出格式过滤器,包括@base64.
例如,如果你想在 file 中编码整个 JSON 对象basic.json,那么你可以使用类似的东西
$ jq -r '. | @base64 | "Basic \(.)"' basic.json
Basic eyJ1c2VyIjoidXNlciIsInBhc3MiOiJwYXNzd29yZCJ9
Run Code Online (Sandbox Code Playgroud)
该"Basic \(.)"过滤器仅使用字符串插值来获得您想要的格式。
这种过滤器的更常规用途可能是对特定值进行编码。
$ jq '.pass |= @base64' basic.json
{
"user": "user",
"pass": "cGFzc3dvcmQ="
}
Run Code Online (Sandbox Code Playgroud)