使用gist API文件创建Github gitst



我正试图使用以下命令制作github gist

curl -X POST -d '{"public":true,"files":{"test.txt":{"content":"String file contents"}}}' -u mgarciaisaia:mypassword https://api.github.com/gists

我应该如何编辑命令,使其将本地计算机上的文件上传到新的gist,而不是从命令行获取字符串中的内容?

您可以使用jq生成合适的有效负载。假设您的文件myfile如下所示:

#!/usr/bin/env bash
sed '
s/://            # Drop colon
s/^/Package: /   # Prepend with "Package: "
N                # Append next line to pattern space
s/n/ | New: /   # Replace newline with " | New: "
N                # Append next line to pattern space
s/n/ | Old: /   # Replace newline with " | Old: "
' updates.txt

一个带有sed命令的shell脚本,包括制表符缩进、转义字符等。要将其转换为JSON字符串:

jq --raw-input --slurp '.' myfile

导致

"#!/usr/bin/env bashnnsed 'nts/://            # Drop colonnts/^/Package: /   # Prepend with "Package: "ntN                # Append next line to pattern spacents/\n/ | New: /   # Replace newline with " | New: "ntN                # Append next line to pattern spacents/\n/ | Old: /   # Replace newline with " | Old: "n' updates.txtn"

这是一个单独的长字符串,安全地转义为JSON字符串。

现在,为了将其转换为我们可以在API调用中用作有效负载的格式:

jq --raw-input --slurp '{files: {myfile: {content: .}}}' myfile

它打印

{
"files": {
"myfile": {
"content": "#!/usr/bin/env bashnnsed 'nts/://            # Drop colonnts/^/Package: /   # Prepend with "Package: "ntN                # Append next line to pattern spacents/\n/ | New: /   # Replace newline with " | New: "ntN                # Append next line to pattern spacents/\n/ | Old: /   # Replace newline with " | Old: "n' updates.txtn"
}
}
}

或者,就公共要点而言:

jq --raw-input --slurp '{public: true, files: {myfile: .}}' myfile

我们可以通过管道将其发送到curl,并告诉它使用@-:从标准输入读取有效载荷

jq --raw-input --slurp '{public: true, files: {myfile: .}}' myfile 
| curl 
https://api.github.com/gists 
--header 'Accept: application/vnd.github.v3+json' 
--header "Authorization: token $(< ~/.token)" 
--data @-

这将使用个人访问令牌进行身份验证,该令牌应位于文件~/.token中。


如果使用GitHub CLI,它会变得简单得多:

gh gist create --public myfile

完成了!

相关内容

  • 没有找到相关文章

最新更新