2012-04-02 17 views

Odpowiedz

44

To co mogę użyć jednego z moich skryptów produkcji:

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 

-F i -A opcje prawdopodobnie nie będzie dla Ciebie interesująca, ale pomocna części są:

curl "${UPLOAD_URL}" --progress-bar 

który mówi curl, aby pokazać pasek postępu (zamiast domyślnego "miernika postępu") podczas przesyłania i:

| tee -a "${LOG_FILE}" ; test ${PIPESTATUS[0]} -eq 0 

która dołącza dane wyjściowe polecenia do pliku dziennika, a także echo do stdout. Część test ${PIPESTATUS[0]} -eq 0 sprawia, że ​​stan wyjścia tej linii (w skrypcie basha) jest taki sam, jak kod wyjścia, który zwrócił komendę curl, a nie status wyjścia komendy tee (konieczne, ponieważ tee jest w rzeczywistości ostatnim poleceniem, wykonane w tym wierszu, a nie curl).


Od 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. 
+1

NB! Komenda 'tee' wymagana do uzyskania informacji o postępie pobierania. jeśli nie chcesz używać 'tee', użyj po prostu komendy' grep -v '^ uniqueStringNeverHappens $' '. więcej informacji: http://stackoverflow.com/a/17178410/751932 – Speakus

+1

Alternatywnie: '>/dev/null' – asymmetric

+0

To nie działa dla mnie :( EDYCJA: nieważne, problem polegał na tym, że chciałem ile czasu to trwa, więc użyłem 'time curl --progress-bar --verbose ...', który zapobiega wyświetlaniu paska postępu, działający bez czasu. –

8

miałem problemy z polecenia przekierowania Zaakceptowanych odpowiedź i znaleźć opcję -o umieści wyjście odpowiedzi w pliku, który pozwala pasek postępu, aby pokazać się.

curl --progress-bar \ 
    -o upload.txt \ 
    -H ${SOME_AUTH_HEADER} \ 
    -T ${SOME_LARGE_FILE} \ 
    "${UPLOAD_URL}" 

Po prostu kolejna opcja, aby uzyskać pożądany wynik.


UWAGA: Nacisk na tej linii ze strony człowieka jest ważne, aby zrozumieć przyczynę, dlaczego pasek postępu nie jest wyświetlana, gdy tylko określenie --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. 
3

Wszystkie inne odpowiedzi tutaj mają problem polegający na tym, że wymagają zapisania pierwotnego wyniku zwijania w pliku (log). To jednak może nie być pożądane we wszystkich przypadkach.

Problem polega na tym, że curl ukrywa pasek postępu/licznik, gdy oczekuje się odpowiedzi serwera, która jest następnie zapisywana w sdout. Więc zasadniczo można przekierować wyjście do pliku, aby ponownie wyświetlić pasek. Jednak nie chcemy, że tak /dev/null i tee może nam pomóc tutaj:

curl --progress-bar -T "${SOME_LARGE_FILE}" "${UPLOAD_URL}" | tee /dev/null 

wyjście Curl jest przekazywana do tee który zapisuje wyjście zarówno do konsoli (co chcemy zobaczyć pasek postępu, a także serwerów odpowiedź) i do pliku (który nie jest nam potrzebny, ale ponieważ używamy /dev/null, to nie ma znaczenia).

Pamiętaj, że twórcy curl nie ukryli paska postępu dla zabawy.W tym przypadku nie zawsze możesz zobaczyć wynik serwera lub może on być wyświetlany tylko przez kilka sekund, ale jeśli nie przejmujesz się tym, rozwiązanie jest fajne.

Powiązane problemy