我试图使用get contents api从我们的GitHub获取配置文件。
这将返回一个JSON,其中包含编码为base64字符串的文件内容。
获取初始api响应:
curl -H 'Authorization: token MY_TOKEN' \
https://github.com/api/v3/repos/MY_OWNER/MY_REPO/contents/MY_FILE
返回带有字段"content": "encoded content ..."
获取编码后的字符串:
添加<prev command> | grep -F "content\":"
这会获取内容,但仍有"content":
字符串,"
字符和最后一个逗号
削减额外内容:
<prev command> | cut -d ":" -f 2 | cut -d "\"" -f 2
解码:
<prev command | base64 --decode>
最终命令:
curl -H 'Authorization: token MY_TOKEN' \
https://github.com/api/v3/repos/MY_OWNER/MY_REPO/contents/MY_FILE | \
grep -F "content\":" | cut -d ":" -f 2 | cut -d "\"" -f 2 | base64 --decode
结果字符串(在base64 --decode
之前)在在线解码器中解码(不太好 - >参见下一项),但未在 bash 中进行解码。答案是
&#34;输入流中的字符无效。&#34;
解码online decoder中的字符串时,某些(不是全部)文件是乱码,而不是原始文本。我已经尝试了所有可用的字符集。
sed 's/..$//'
删除最后2个(换行符)字符,但这没有效果。echo MY_ECODED_STRING_PASTED_HERE | base64 --decode
命令,它与在线工具具有相同的效果,即它被解码为乱码。答案 0 :(得分:1)
答案 1 :(得分:0)
根据tripleee的建议,我已将提取方法切换为jq
file=randomFileName74894031264.txt
curl -H 'Authorization: token MY_TOKEN' https://github.com/api/v3/repos/MY_OWNER/MY_REPO/contents/MY_FILE > "$file"
encoded_str=($(jq -r '.content' "$file"))
echo "$encoded_str" | base64 -D
rm -f "$file"
这在从命令行运行时有效,但当作为脚本运行时,stdout不会刷新,我们只获取文件的前几行。
当我正式化通用脚本时,我会更新这个答案。