Ich versuche, nur die ausführlichen Abschnitte einer cURL-Anforderung (die an gesendet werden stderr
) aus der Bash-Shell zu drucken .
Aber wenn ich so umleiten stdout
:
curl -v http://somehost/somepage > /dev/null
In der Mitte der Ausgabe wird eine Art Ergebnistabelle angezeigt, um stderr
:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
Gefolgt von diesem gegen Ende:
{ [data not shown]
118 592 0 592 0 0 15714 0 --:--:-- --:--:-- --:--:-- 25739
Dadurch werden die Antwortheader weniger lesbar.
Ich sehe diesen Text nicht, wenn ich ihn nicht weiterleite.
Ein anderer Weg, um die Auswirkungen zu sehen:
Tabelle erscheint nicht:
curl -v http://somehost/somepage 2>&1
Tabelle erscheint:
curl -v http://somehost/somepage 2>&1 | cat
1) Wie kommt es, dass dies nur bei bestimmten Arten von Weiterleitungen auftritt?
2) Wie kann man es am besten unterdrücken?
Danke
-s
war der Schlüssel!-s
aber ohne-v
, keine Fehler wie Verbindungsfehler angezeigt werden . Dazu sollten Sie auch-S
(oder--show-error
) wie in der Antwort von mhoydis hinzufügen .curl
an weitergeleitet habejq
. Kein Fortschrittsbalken ohne Piping zujq
, dann mussjq
ich beim Piping zu zurückgehen und hinzufügen-s
.STDOUT
es kein tty ist. Wenn die Ausgabe nicht weitergeleitet wird, möchten Sie nicht, dass Fortschrittsinformationen mit der normalen Ausgabe vermischt werden, die Sie sehen und eine Vorstellung vom Fortschritt haben. Wenn die Ausgabe umgeleitet oder weitergeleitet wird, können Sie sie nicht sehen, sodass Sie keine Fortschrittsanzeige haben - es sei denn, der Fortschrittsbalken ist aktiviert.Dadurch wird der Statusdialog unterdrückt, andernfalls werden Fehler an STDERR ausgegeben.
Das obige gibt die Statustabelle bei der Umleitung aus.
Das Obige unterdrückt die Statustabelle beim Umleiten, aber Fehler gehen immer noch zu STDERR.
Das Obige ist ein Beispiel für einen Fehler bei STDERR.
Fügen Sie einfach am Ende 2> & 1 hinzu, um STDERR zu STDOUT umzuleiten (in diesem Fall zu einer Datei).
quelle
Nach
man curl
:Anwendungsbeispiel:
oder wenn Sie den HTTP-BODY in einer Variablen in Bash erfassen möchten
Sie können
-s
oder--silent
austauschbar verwenden.quelle
In Bezug auf Frage 1 ( wie cURL weiß, dass die Tabelle nur angezeigt wird, wenn die Ausgabe umgeleitet wird) wusste ich nicht, dass ein Programm erkennen kann, dass die Ausgaben gerichtet sind, aber es scheint, dass es auf POSIX-Systemen eine Funktion gibt,
isatty
die meldet, ob oder nicht Ein Dateideskriptor bezieht sich auf ein Terminal.quelle
[[ -p /dev/stdout ]] && echo "stdout is to a pipe"; [[ -t 1 ]] && echo "output to terminal"; [[ ! -t 1 && ! -p /dev/stdout ]] && echo "output redirected"
von der Curl-Manpage
curl muss isatty verwenden , um die Umleitung zu bestimmen, und druckt die Fortschrittsanzeige, wenn sie zu einer Datei oder einer Shell-Pipe umgeleitet wird.
von der Curl-Manpage
quelle
Um echte Fehlermeldungen irgendwo abzulegen, sollten Sie strerr in eine Protokolldatei schreiben. Sowas in der Art:
quelle
Da ich hinter einem Proxy stehe, benutze ich einen Befehl wie diesen.
date -s "$ (curl --proxy http: // PROXY: 8080 -s http://google.com --head -s | grep Date | sed 's / Date: // g')"
quelle