Antworten:
Fügen Sie die -s
Option (stumm) hinzu, um die Fortschrittsanzeige zu entfernen, und leiten Sie dann stderr zu stdout um, um eine ausführliche Ausgabe auf demselben fd wie der Antworttext zu erhalten
curl -vs google.com 2>&1 | less
2>&1
.
Ihre URL enthält wahrscheinlich kaufmännisches Und. Ich hatte auch dieses Problem und stellte fest, dass meine URL voll mit kaufmännischem Und (von übergebenen CGI-Variablen) war und daher alles auf seltsame Weise in den Hintergrund gesendet wurde und daher nicht richtig umgeleitet wurde. Wenn Sie die URL in Anführungszeichen setzen, wird dies behoben.
Die obige Antwort hat bei mir nicht funktioniert. Was letztendlich geschah, war diese Syntax:
curl https://${URL} &> /dev/stdout | tee -a ${LOG}
tee bringt die Ausgabe auf den Bildschirm, hängt sie aber auch an mein Protokoll an.
&> /dev/stdout
war definitiv der fehlende Teil, danke
Wenn Sie die Ausgabe in einer Datei benötigen , können Sie eine Umleitung verwenden:
curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1
Bitte stellen Sie sicher, dass Sie das >curl-output.txt
und nicht umdrehen 2>&1
, was aufgrund des Umleitungsverhaltens von bash nicht funktioniert .
Ich fand das Gleiche: Curl selbst würde in STDOUT gedruckt, konnte aber nicht in ein anderes Programm geleitet werden.
Zuerst dachte ich, ich hätte es gelöst, indem ich zuerst xargs verwendet habe, um die Ausgabe wiederzugeben:
curl -s ... <url> | xargs -0 echo | ...
Wie in den Kommentaren erwähnt, funktioniert es jedoch auch ohne den xargs-Teil. -s
Daher ist (stiller Modus) der Schlüssel, um zu verhindern, dass ein externer Fortschritt an STDOUT ausgegeben wird:
curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/'
Im obigen Beispiel wird der einfache <sometag>
Inhalt (der keine eingebetteten Tags enthält) aus der XML-Ausgabe der Curl-Anweisung abgerufen.
Nur meine 2 Cent. Der folgende Befehl sollte den Trick ausführen, wie zuvor beantwortet
curl -vs google.com 2>&1
Wenn Sie jedoch die Ausgabe in eine Datei abrufen müssen,
curl -vs google.com > out.txt 2>&1
sollte arbeiten.
Dieses einfache Beispiel zeigt, wie die Curl-Ausgabe erfasst und in einem Bash-Skript verwendet wird
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
diesem Fall werden die Fehler für mich korrekt zur Standardausgabe umgeleitet.