【问题标题】:Upload a file to a Gist with bash使用 bash 将文件上传到 Gist
【发布时间】:2022-02-17 22:24:52
【问题描述】:

我通常在 Github 的Gist 上粘贴错误报告和日志,以交换编程相关的调试信息。 Gist 没有上传文件的按钮。所以有时候把你的大型错误报告复制粘贴到 gists textarea 中进行输入并不是那么方便。

有没有办法从命令行将文件上传到 Gist 帐户中的新 Gist 中?

还为要上传的文件创建一个临时 git 存储库会有所帮助,然后我会在脚本中自动执行此操作。

最后我想用一个 bash 脚本自动在 github 上发布我的编程项目的调试信息

【问题讨论】:

  • 不是编程问题,在您链接到的页面上还有一个显示“添加文件”的按钮。
  • 这是一道编程题,因为gist是程序员最大的平台。此外:有一个“添加文件”按钮,但不会上传文件,它会打开另一个文本区域以 粘贴 另一个文件
  • 我澄清了我的问题的目的,请重新考虑您的投票
  • 不能用 pastebinit 上传到 gist 吗? bugs.launchpad.net/pastebinit/+bug/268287

标签: git automation github-api gist


【解决方案1】:

Here 是一个适用于我在 Bash/Dash 上创建匿名要点的解决方案(很可能不是防弹的):

# 0. Your file name
FNAME=some.file

# 1. Somehow sanitize the file content
#    Remove \r (from Windows end-of-lines),
#    Replace tabs by \t
#    Replace " by \"
#    Replace EOL by \n
CONTENT=$(sed -e 's/\r//' -e's/\t/\\t/g' -e 's/"/\\"/g' "${FNAME}" | awk '{ printf($0 "\\n") }')

# 2. Build the JSON request
read -r -d '' DESC <<EOF
{
  "description": "some description",
  "public": true,
  "files": {
    "${FNAME}": {
      "content": "${CONTENT}"
    }
  }
}
EOF

# 3. Use curl to send a POST request
curl -X POST -d "${DESC}" "https://api.github.com/gists"

如果您需要创建与您的 github 帐户关联的 gist,(用于基本身份验证)将最后一行替换为:

curl -u "${GITHUB_USERNAME}" -X POST -d "${DESC}" "https://api.github.com/gists"

更多高级认证方案,请查看https://developer.github.com/v3/#authentication

【讨论】:

  • @Elric Done !
  • 有一个问题:如果您正在上传的文件包含% 字符,那么它似乎会在此时中断:我尝试上传包含以下内容的文件:UNIX_TIMESTAMP=$(date +%s%3N --date='TZ="UTC+2" '"$TIME")
  • @rubo77 很有趣。现在,我不明白为什么% 可能有特殊含义。我不知道我是否有时间对此进行调查。如果您有更多想法,请随时通知我!
  • 你为什么要使用 gist 呢?让我们继续使用可以跟踪其问题的 repo:github.com/ceremcem/create-gist
【解决方案2】:

用 Python 实现的命令行工具:

pip install python-gist
gist create "example description" foo.txt bar.txt

https://github.com/jdowner/gist

如果您更喜欢 Ruby gem,请参阅https://github.com/defunkt/gist

【讨论】:

  • 在 Ubuntu 上:apt install gist 提供 gem。如果您愿意,我相信您可以使用 ruby​​ 进行安装。像宝石一样工作:)
【解决方案3】:

使用GitHub CLI

gh gist create yourfile

或者,对于公共要点,

gh gist create --public yourfile

要添加描述,请使用--desc/-d 标志,要直接在网络浏览器中打开,请使用--web/-w

请参阅reference manual for gh gist create

【讨论】:

  • 我喜欢这个,这是一个较新的答案:)
【解决方案4】:

基于 Sylvain Leroux 的回答,我们可以通过使用jq 命令行工具来替换 sanitization 和 json 构建步骤:

$ jq -Rs '{"description": "some description", "public": true, "files": {"'$FNAME'": {"content": .}}}' $FNAME | curl -X POST -d @- "https://api.github.com/gists"

或者,通过身份验证:

$ jq -Rs '{"description": "some description", "public": true, "files": {"'$FNAME'": {"content": .}}}' $FNAME | curl -u "${GITHUB_USERNAME}" -X POST -d @- "https://api.github.com/gists"

【讨论】:

    【解决方案5】:

    您应该能够使用GitHub API for creating a Gist 创建一个新的 Gist:

    POST /gists
    

    您会发现使用此 API 的各种脚本,例如:

    即使是 GitHub 编辑器 Atom.io 也有一个 gist-it feature

    【讨论】:

    • Nice ;) 但这并没有解释如何用 bash 来做,这可能吗?
    • @rubo77 是的:使用我提到的 curl 版本。这是一个 bash 命令。
    【解决方案6】:

    Here 是一个 Python 脚本来做同样的事情。它是由我积极开发的。自述文件的使用细节非常简单。 一些例子-

    获取要点列表

    gifc get 5

    创建一个要点

    • nanovimgedit 等编辑器以交互方式创建
      • gifc create create.md -d "How to create a gist from cli" -i nano
    • 直接从cli输入内容
      • gifc create create.md -d "How to create a gist from cli" -m '''If you want to create a gist from an existing file then you do the following- `gifc create create.md -d "How to create a gist from cli" -f file.md`'''
    • 从文件中获取内容
      • gifc create create.md -d "How to create a gist from cli" -f file.md

    更新要点

    • 迭代编辑所有(或部分)文件

      • gifc update ffd2f4a482684f56bf33c8726cc6ae63 -i vi
        您可以从之前的 get 方法中获取 gist id
    • 更改说明

      • gifc update ffd2f4a482684f56bf33c8726cc6ae63 -cd "New description"
        您可以从之前的 get 方法中获取 gist id
    • nanovimgedit

      等编辑器中以交互方式编辑文件的内容
      • gifc update ffd2f4a482684f56bf33c8726cc6ae63 -f file_to_update.md
    • 两者都做
      • gifc update ffd2f4a482684f56bf33c8726cc6ae63 -f file_to_update.md -cd "New description"

    从 gist 中删除文件

    gifc remove ffd2f4a482684f56bf33c8726cc6ae63 -r file1.md script.py readme.txt
    您可以从之前的 get 方法中获取 gist id

    删除整个要点

    gifc delete ffd2f4a482684f56bf33c8726cc6ae63
    您可以从之前的get 方法中获取gist id

    【讨论】:

      【解决方案7】:

      对于带有有限busybox ash shell 的路由器,我创建了这个shell script post and patch gister。用法:$ pgist my_file_to_post_or_patch_to_gist.extension

      无需记住长的要点 ID。这个 gister 被编码为自动查找相应的 gist ID。限制是:

      1. 您的帐户中最多 30 个(也许 100 个)gist
      2. 每个 gist 最多 300 个文件
      3. 所有 30×300 gist 文件的唯一文件名
      4. 由于“解析 JSON 的问题”而无法发布/修补自身

      安装示例

      curl -O https://gist.githubusercontent.com/ProBackup-nl/3971a45b21749cfff6c0069d3dad1dde/raw/pgist.sh &amp;&amp; chmod 755 pgist.sh &amp;&amp; mv pgist.sh /opt/usr/sbin/pgist

      依赖关系

      • github oauth token
      • jq
      • sed
      • awk
      • curlca-certificates 创建有效的证书链,而不是

      (60) SSL 证书问题:无法获取本地颁发者证书

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-08
        • 2015-06-07
        • 1970-01-01
        • 1970-01-01
        • 2020-06-16
        • 2017-08-17
        • 2013-08-04
        • 2017-11-16
        相关资源
        最近更新 更多