2009-07-21 8 views
4

Ist es möglich, die Umleitungsausgabe zu einer Datei und Pipes mit || zu kombinieren? (Nicht sicher, was das heißt)Bash-Umleitung in Kombination mit "Doppelrohr" -Notation

Beispiel:

(wget -qO- example.com/duff || exit) | some_processing >> outfile.txt 

Wenn wget ausfällt, würde ich beenden möchte und nicht some_processing ausführen oder die leere Datei erstellen.

+0

Ich nehme an, dass dies ein One-Liner sein muss? –

+0

Es wäre nett, aber andere Lösungen gerne angenommen –

Antwort

3
#!/bin/bash 

RESULT=`wget -qO- example.com/duff` 

if [ $? -eq 0 ]; 
then 
    echo $RESULT | some_processing >> outfile.txt 
fi 
+0

Das hat den Trick, danke. –

3

|| ist eine logische oder. Das Erstellen von outfile.txt würde viel komplexere Syntax erfordern; Wie Sie es geschrieben haben (der normale Weg), outfile.txt wird erstellt, noch bevor wget ausgeführt wird.

Ich kann nicht wirklich eine Möglichkeit vorstellen, die Leitung zu zwingen, gar nicht zu passieren, wenn der Linke Befehl fehlschlägt. Ich würde nur ein Perl-Skript schreiben, wenn ich du wäre.

0

Ich denke, dass Sie so ziemlich beantworten, wie es geht.

Wenn wget fehlschlägt, möchte ich beenden und nicht some_processing ausführen oder die leere Datei erstellen.


wget wget -qO- example.com/duff

if [[$? -ne 0]] // $? bedeutet Rückgabewert, auf geschriebene Programme auch diese dann Null

sein sollte

some_processing >> outfile.txt 

fi


ich denke, das wird erreichen, was Sie wollen.

1

([? -eq $ 0] & & some_processing >> outfile.txt) < < < $ (wget -qO- example.com/duff)

0

Beachten Sie, dass es möglicherweise nicht genug, um nach Rückkehrcode zu suchen. es könnte gut sein, auch auf Rückkehr HTTP-Status wie 404 ..... usw. zu überprüfen