tôi sử dụng cú pháp sau để tải lên tập tin:cURL: Cách hiển thị thông tin tiến trình trong khi tải lên?
curl --form [email protected] --form press=OK [URL]
Làm thế nào để hiển thị sự tiến bộ? Cám ơn.
tôi sử dụng cú pháp sau để tải lên tập tin:cURL: Cách hiển thị thông tin tiến trình trong khi tải lên?
curl --form [email protected] --form press=OK [URL]
Làm thế nào để hiển thị sự tiến bộ? Cám ơn.
Đây là những gì tôi sử dụng trong một hợp đồng xây dựng các kịch bản của tôi:
curl "${UPLOAD_URL}" \
--progress-bar \
--verbose \
-F build="${BUILD}" \
-F version="${VERSION}" \
-F ipa="@${IPA};type=application/octet-stream" \
-F assets="@-;type=text/xml" \
-F replace="${REPLACE}" \
-A "${CURL_FAKE_USER_AGENT}" \
<<< "${ASSETS}" \
| tee -a "${LOG_FILE}" ; test ${PIPESTATUS[0]} -eq 0
Các -F
và -A
tùy chọn có thể sẽ không được quan tâm đến bạn, nhưng những phần hữu ích là:
curl "${UPLOAD_URL}" --progress-bar
cho biết curl
để hiển thị thanh tiến trình (thay vì 'đồng hồ đo tiến độ' mặc định) trong khi tải lên và:
| tee -a "${LOG_FILE}" ; test ${PIPESTATUS[0]} -eq 0
nối thêm đầu ra của lệnh vào tệp nhật ký và cũng có thể làm lại nó tới stdout
. Phần test ${PIPESTATUS[0]} -eq 0
làm cho nó để trạng thái thoát của dòng này (trong tập lệnh bash) là cùng một mã thoát mà lệnh curl
trả lại và không phải là trạng thái thoát của lệnh tee
(cần thiết vì tee
thực sự là lệnh cuối cùng được thực hiện trong dòng này, không phải curl
).
Từ man curl
:
PROGRESS METER
curl normally displays a progress meter during operations, indicating the amount of transferred data, transfer speeds and estimated time left, etc.
curl displays this data to the terminal by default, so if you invoke curl to do an operation and it is about to write data to the terminal, it disables the progress meter as otherwise it would mess up the
output mixing progress meter and response data.
If you want a progress meter for HTTP POST or PUT requests, you need to redirect the response output to a file, using shell redirect (>), -o [file] or similar.
It is not the same case for FTP upload as that operation does not spit out any response data to the terminal.
If you prefer a progress "bar" instead of the regular meter, -# is your friend.
OPTIONS
-#, --progress-bar
Make curl display progress as a simple progress bar instead of the standard, more informational, meter.
NB! 'tee' lệnh cần thiết để có được thông tin về tiến trình tải xuống. nếu bạn không muốn sử dụng 'tee' thì chỉ cần sử dụng lệnh' grep -v '^ uniqueStringNeverHappens $' '. thêm thông tin: http://stackoverflow.com/a/17178410/751932 – Speakus
Cách khác: '>/dev/null' – asymmetric
Điều này dường như không hoạt động đối với tôi: ( EDIT: nevermind, vấn đề là tôi muốn thời gian phải mất bao lâu, vì vậy tôi đã sử dụng 'time curl --progress-bar --verbose ...' để ngăn không cho thanh tiến trình hiển thị. –
tôi đã gặp rắc rối với chuyển hướng lệnh câu trả lời chấp nhận và tìm thấy các tùy chọn -o
sẽ đặt ra câu trả lời trong một tập tin cho phép thanh tiến trình để hiển thị.
curl --progress-bar \
-o upload.txt \
-H ${SOME_AUTH_HEADER} \
-T ${SOME_LARGE_FILE} \
"${UPLOAD_URL}"
Chỉ một tùy chọn khác để có được kết quả mong muốn.
LƯU Ý: Nhấn mạnh vào dòng này từ trang con người là quan trọng để hiểu được nguyên nhân gốc rễ của lý do tại sao các thanh tiến trình không hiển thị khi chỉ định --progress-bar
.
If you want a progress meter for HTTP POST or PUT requests,
you need to redirect the response output to a file,
using shell redirect (>), -o [file] or similar.
Tất cả câu trả lời khác ở đây đều có vấn đề mà chúng yêu cầu bạn viết đầu ra gốc của tập tin curl vào tệp nhật ký. Tuy nhiên, điều này có thể không được mong muốn trong mọi trường hợp.
Vấn đề là curl ẩn thanh tiến trình/mét, khi phản hồi của máy chủ được mong đợi, sau đó được ghi vào sdout. Vì vậy, về cơ bản có thể chuyển hướng đầu ra đến một tập tin để hiển thị lại thanh. Tuy nhiên chúng tôi không muốn điều đó, vì vậy /dev/null
và tee
có thể giúp chúng tôi ở đây:
curl --progress-bar -T "${SOME_LARGE_FILE}" "${UPLOAD_URL}" | tee /dev/null
đầu ra Curl được truyền cho tee
mà viết đầu ra cả ra cửa sổ Console (mà chúng tôi muốn nhìn thấy thanh tiến trình và cũng là máy chủ phản hồi) và vào một tập tin (mà không cần thiết bởi chúng tôi, nhưng khi chúng tôi sử dụng /dev/null
điều này không quan trọng).
Lưu ý rằng các nhà phát triển curl tất nhiên không ẩn thanh tiến trình để giải trí.Trong trường hợp này ở đây bạn có thể không phải lúc nào cũng nhìn thấy kết quả máy chủ hoặc nó chỉ có thể được hiển thị một vài giây, nhưng nếu bạn không quan tâm về điều này, thì giải pháp là một giải pháp tốt.
http://curl.haxx.se/docs/manpage.html Xem phần trên đồng hồ đo tiến độ. Tôi nghi ngờ rằng bạn cần phải đầu ra đường ống vào một tập tin, mặc dù không phải là tích cực. – Corbin
Bạn nói đúng. Cám ơn! – Determinant