Загрузите файл в Gist с помощью bash

Я обычно вставляю отчеты об ошибках и журналы на Gist в Github для обмена соответствующей отладочной информацией программирования. У Gist нет кнопки для загрузки файла. Поэтому иногда не так удобно копировать и вставлять ваши большие errorreports в gists textarea для ввода.

есть ли способ загрузить файл из командной строки в новый Gist в вашей учетной записи Gist?

также создание временного репозитория git для файла для загрузки поможет, я автоматизировал бы это в скрипте.

в конце концов, я хотел бы автоматизировать публикацию отладочной информации моего проекта программирования на github с одним скриптом bash

5 ответов


здесь это решение, которое работает для меня на Bash / Dash для создания аноним gist (очень вероятно, не пуленепробиваемый):

# 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( "\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"

Если вам нужно создать gist, связанный с вашей учетной записью github, (для базовой аутентификации) замените последнюю строку на:

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

для более продвинутых схем аутентификации см. https://developer.github.com/v3/#authentication


см.https://github.com/defunkt/gist

Это рубиновый скрипт, который можно использовать из командной строки.


вы должны иметь возможность создать новый Gist, используя GitHub API для создания Gist:

POST /gists

вы найдете различные сценарии, использующие этот API, например:

даже редактор GitHub Атом.Ио имеет суть-это функция.

https://raw.githubusercontent.com/rpowelll/gist-it/master/media/screencast.gif


основываясь на ответе Сильвена Леру, мы можем заменить шаги по дезинфекции и строительству json, используя jq не инструмент командной строки:

$ 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"


для маршрутизаторов с ограниченными оболочками busybox ash я создал это shell скрипт post и патч gister. Использование:$ pgist my_file_to_post_or_patch_to_gist.extension

нет необходимости запоминать длинные идентификаторы gist. Этот gister закодирован для автоматического поиска соответствующего идентификатора gist. Ограничения:

  1. до 30 (может быть, 100) gists в вашем аккаунте
  2. до 300 файлов на gist
  3. уникальные имена файлов для всех ваших файлов 30×300 gist
  4. это не в состоянии сообщение / патч из-за "проблемы с разбором JSON"

пример установки

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

зависимости

  • на GitHub OAuth-токен
  • jq
  • sed
  • awk
  • curl и ca-certificates чтобы создать допустимую цепочку сертификатов вместо

(60) проблема с сертификатом SSL: невозможно получить локальный сертификат эмитента