Odpowiedzi:
dodaj -s
opcję (cichą), aby usunąć wskaźnik postępu, a następnie przekieruj stderr na standardowe wyjście, aby uzyskać szczegółowe dane wyjściowe na tym samym fd, co treść odpowiedzi
curl -vs google.com 2>&1 | less
2>&1
.
Twój adres URL prawdopodobnie zawiera ampersandy. Miałem też ten problem i zdałem sobie sprawę, że mój adres URL był pełen znaków ampersand (z przekazywanych zmiennych CGI), więc wszystko było wysyłane do tła w dziwny sposób, a tym samym nie przekierowywało poprawnie. Jeśli umieścisz cudzysłowy wokół adresu URL, naprawi to.
Powyższa odpowiedź nie zadziałała dla mnie, ostatecznie powstała następująca składnia:
curl https://${URL} &> /dev/stdout | tee -a ${LOG}
tee umieszcza dane wyjściowe na ekranie, ale także dołącza je do mojego dziennika.
&> /dev/stdout
zdecydowanie brakowało, dzięki
Jeśli potrzebujesz danych wyjściowych w pliku , możesz użyć przekierowania:
curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1
Pamiętaj, aby nie odwrócić >curl-output.txt
i 2>&1
, co nie zadziała ze względu na zachowanie przekierowania basha .
Znalazłem to samo: sam curl drukowałby do STDOUT, ale nie można go było przesłać potokiem do innego programu.
Na początku myślałem, że rozwiązałem to, używając xargs, aby najpierw powtórzyć wynik:
curl -s ... <url> | xargs -0 echo | ...
Ale potem, jak wskazano w komentarzach, działa również bez części xargs, więc -s
(tryb cichy) jest kluczem do zapobiegania dodatkowym wynikom postępu w STDOUT:
curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/'
Powyższy przykład pobiera prostą <sometag>
zawartość (nie zawierającą osadzonych tagów) z danych wyjściowych XML instrukcji curl.
Tylko moje 2 centy. Poniższe polecenie powinno załatwić sprawę, zgodnie z wcześniejszą odpowiedzią
curl -vs google.com 2>&1
Jednak jeśli zajdzie potrzeba przeniesienia wyniku do pliku,
curl -vs google.com > out.txt 2>&1
powinno działać.
Ten prosty przykład pokazuje, jak przechwytywać dane wyjściowe curl i używać ich w skrypcie bash
function main
{
\curl -vs 'http://google.com' 2>&1
# note: add -o /tmp/ignore.png if you want to ignore binary output, by saving it to a file.
}
# capture output of curl to a variable
OUT=$(main)
# search output for something using grep.
echo
echo "$OUT" | grep 302
echo
echo "$OUT" | grep title
curl -v url 2>&1
, błędy są poprawnie przekierowywane na standardowe wyjście.