2014-10-21 14 views
13

Di solito incollo segnalazioni di errori e log in Gist in Github, per scambiare informazioni di debug rilevanti della programmazione. Gist non ha un pulsante per caricare un file. Quindi a volte non è così comodo copiare e incollare i vostri errori errati nella textarea degli input per l'input.Carica un file in un Gist con bash

C'è un modo per caricare un file dalla riga di comando in un nuovo Gist nel tuo account Gist?

anche creare un repository git temporaneo per il file da caricare sarebbe utile, vorrei automatizzare questo in uno script quindi.

Alla fine vorrei automatizzare la pubblicazione di informazioni di debug del mio progetto di programmazione su GitHub con un solo script bash

+1

Non è una domanda di programmazione, c'è anche un pulsante che dice "aggiungi file" nella pagina a cui ti colleghi. –

+1

Questa è una domanda di programmazione, perché gist è la più grande piattaforma per i programmatori.inoltre: c'è un pulsante "Aggiungi file" ma che non carica un file, apre un'altra area di testo in ** Incolla ** un altro file – rubo77

+0

Gist non è la più grande piattaforma per i programmatori, è una funzionalità di github, che è la una piattaforma. Chiaramente non hai letto la differenza tra ciò che è un repository Github e che cos'è un GIST, questo è coperto nella documentazione di aiuto. 'Aggiungi file' ottieni un altro input per incollare il contenuto del tuo file in. –

risposta

6

Here è una soluzione che funziona per me su Bash/Dash per creare anonima Gist (molto probabilmente non a prova di proiettile):

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

Se è necessario creare un nocciolo associato al tuo account github , (per l'autenticazione di base) sostituire l'ultima riga da:

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

per i regimi di autenticazione più avanzate, si prega di consultare https://developer.github.com/v3/#authentication

+1

Potresti creare una sintesi di questo codice? – Elric

+0

@Elric [Fatto!] (Https://gist.github.com/s-leroux/7cb7424d33ba3753e907cc2553bcd1ba) –

+0

L'ho migliorato un po ': https://gist.github.com/rubo77/3b8b15f4df5b5287a24f87523c41e4ce – rubo77

7

Vedi https://github.com/defunkt/gist

Si tratta di uno script di Ruby che può essere utilizzato da linea di comando.

+1

su Ubuntu: 'apt install gist' fornisce la gemma. Sono sicuro che puoi installare con rubino se preferisci. funziona come una gemma :) – Thufir

1

Costruire sulla risposta di Sylvain Leroux, possiamo sostituire i gradini di sanificazione e la costruzione di JSON facendo uso dello strumento da riga di jq di comando:

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

Oppure, con l'autenticazione:

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

+0

Uso interessante del comando jq. +1 – VonC