我正试图使用以下命令制作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
完成了!