2014-10-21 19 views
13

Tôi thường dán báo cáo lỗi và nhật ký trên Gist tại Github, để trao đổi thông tin gỡ lỗi có liên quan đến lập trình. Gist không có nút để tải lên tệp. Vì vậy, đôi khi nó không phải là quá thuận tiện để sao chép và dán errorreports lớn của bạn vào textists của gists cho đầu vào.Tải tệp lên Gist bằng bash

Có cách nào để tải tệp từ dòng lệnh lên Gist mới trong tài khoản Gist của bạn không?

cũng tạo một kho lưu trữ git tạm thời cho tệp để tải lên sẽ giúp ích, tôi sẽ tự động hóa điều này trong tập lệnh sau đó.

Cuối cùng tôi muốn tự động đăng tải thông tin debug của dự án lập trình của tôi trên github với kịch bản một bash

+1

Không phải là câu hỏi lập trình, cũng có nút có nội dung "thêm tệp" trên trang bạn liên kết tới. –

+1

Đây là một câu hỏi lập trình, bởi vì gist là nền tảng lớn nhất cho các lập trình viên.bên cạnh đó: có nút "Thêm tệp" nhưng không tải lên tệp, nó sẽ mở một vùng văn bản khác để dán ** một tệp khác – rubo77

+0

Gist không phải là nền tảng lớn nhất cho các lập trình viên, nó là một tính năng của github, đó là một nền tảng. Rõ ràng bạn đã không đọc sự khác biệt giữa kho lưu trữ github là gì và ý chính là gì, điều này được đề cập trong tài liệu trợ giúp. 'Thêm tệp' lấy một đầu vào khác để dán nội dung tệp của bạn vào. –

Trả lời

6

Here là một giải pháp mà làm việc cho tôi trên Bash/Dash để tạo nặc danh ý chính (rất có thể là không chống đạn):

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

Nếu bạn cần để tạo ra một ý chính liên quan đến tài khoản github của bạn (cho xác thực cơ bản) thay thế dòng cuối bởi:

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

đối với các chương trình xác thực cao cấp hơn, vui lòng xem https://developer.github.com/v3/#authentication

+1

Bạn có thể tạo ra một ý chính của mã này không? – Elric

+0

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

+0

tôi tăng cường cho nó một chút: https://gist.github.com/rubo77/3b8b15f4df5b5287a24f87523c41e4ce – rubo77

3

Bạn sẽ có thể tạo ra một Gist mới, sử dụng các GitHub API for creating a Gist:

POST /gists 

Bạn sẽ tìm thấy các tập lệnh khác nhau bằng cách sử dụng API này, như:

Ngay cả những biên tập viên GitHub Atom.iogist-it feature.

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

+1

Nice;) Nhưng điều này không giải thích làm thế nào để làm điều đó với bash, là có thể? – rubo77

+1

@ rubo77 yes: sử dụng phiên bản curl mà tôi đề cập đến. Đó là lệnh bash. – VonC

7

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

Đó là một kịch bản Ruby có thể được sử dụng từ dòng lệnh.

+1

trên Ubuntu: 'apt install gist' cung cấp cho gem. Tôi chắc rằng bạn có thể cài đặt bằng ruby ​​nếu bạn thích. hoạt động như một viên ngọc :) – Thufir

1

Dựa trên câu trả lời của Sylvain Leroux, chúng ta có thể thay thế các bước làm vệ sinh và xây dựng json bằng cách sử dụng công cụ dòng jq lệnh:

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

Hoặc, với xác thực:

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

+0

Sử dụng thú vị lệnh jq. +1 – VonC