So leiten Sie einen Teil von stderr und stdout nach / dev / null um

2233
Jav

Mein Programm gibt an stderrund aus stdout. Ich möchte für "Muster" entweder in stderrund grep stdout. Und ich möchte den Rest zu schicken /dev/null.

Wenn ich nach der Umleitung pfeife stderr: ./prog 2>/dev/null | grep "pattern" Ich bekomme keine Zeilen stderr, die "Muster" enthalten.

Wenn ich vor dem Weiterleiten pfeife stderr: ./prog | grep "pattern" 2>/dev/null Keiner stderrwird weitergeleitet/dev/null

Danke für deine Hilfe.

0
* Wenn ich vor der Weiterleitung stderr pfeife: ./prog | grep "pattern" 2> / dev / null keiner von stderr wird nach / dev / null * umgeleitet: und wie ist das schlecht? MariusMatutiae vor 10 Jahren 0
Ich möchte, dass nur die Zeilen sichtbar sind, die "Muster" enthalten. Nicht alle von stderr. Jav vor 10 Jahren 0
Das bekommen Sie mit `/ prog | grep "pattern" `automatisch. MariusMatutiae vor 10 Jahren 0
@MariusMatutiae: Nein, eine normale Pipe ("|") leitet nur stdout an den nächsten Prozess weiter. stderr würde "seitwärts" passieren und in der Ausgabe vollständig (ungefiltert) erscheinen. tshinbum vor 10 Jahren 0

2 Antworten auf die Frage

5
tshinbum

Wenn es Ihnen egal ist, ob die Zeichenfolge mit stdout oder stderr übereinstimmt, führen Sie einfach die beiden Streams zusammen, indem Sie stderr nach stdout umleiten.

$ your_program 2>&1 | grep "pattern" 

Das Beispiel funktioniert in sh, bash, ksh, zsh. csh sollte sein:

$ your_program |& grep "pattern" 
1
someuser
./prog 2>&1 | grep pattern 

Sie müssen nur die Zeilen sehen, die "Muster" enthalten.