Hallo Liste, ich möchte gern einen Befehl ausführen, und dessen stdout in eine Datei umleiten, stderr hingegen in einen weiteren Befehl pipen. Also im Prinzip sowas: befehl >> datei | logger Wobei hier in datei der Standardauswurf landen soll, die Fehler hingegen im Logfile. Hat jemand einen Tip für mich? Danke + Gruß. Andy -- Antworten an lists@feile.net werden in /dev/null archiviert! Bitte ggf. lists... durch mail... ersetzen. Andreas Feile www.feile.net
hallo andreas, Andreas Feile wrote:
Hallo Liste,
ich möchte gern einen Befehl ausführen, und dessen stdout in eine Datei umleiten, stderr hingegen in einen weiteren Befehl pipen. Also im Prinzip sowas:
befehl >> datei | logger
Wobei hier in datei der Standardauswurf landen soll, die Fehler hingegen im Logfile. Hat jemand einen Tip für mich?
befehll 2>>datei | logger ? -- gruss thomas
Thomas Fankhauser wrote:
Andreas Feile wrote:
ich möchte gern einen Befehl ausführen, und dessen stdout in eine Datei umleiten, stderr hingegen in einen weiteren Befehl pipen. [...]
befehll 2>>datei | logger ?
Nee. Damit landet stderr in der Datei "datei" und stdout wird gepipt zum Programm logger. Das ist nicht das, was gefordert wurde. Eine hoffentlich richtige Loesung waere befehl 2>&1 > datei | ... Wichtig dabei ist die Reihenfolge, denn "2>&1 > datei" macht etwas anderes als "> datei 2>&1", wie ich z.B. in der Email http://lists.suse.com/archive/suse-linux/2004-Mar/0060.html erklaert habe und wie auch in "man bash" nachzulesen ist. Ebenso ist es wichtig zu wissen, dass eine Pipe immer nur stdout weiter leitet, d.h. stderr ist auf alle Faelle vor der Pipe nach stdout umzuleiten, sonst gehts gar nicht. Damit ist eine Loesung schon sehr nahe liegend, man muss nur noch wie oben beschrieben die richtige Reihenfolge der Operationen beachten. CU, Thomson
Am Montag, 19. Juli 2004 17:47 schrieb Thomas Hertweck: Eine hoffentlich richtige Loesung waere
befehl 2>&1 > datei | ...
Nope, leider auch falsch (Warum erfährst du z.B: hier: http://www.linux-tutorial.info/modules.php?name=Tutorial&pageid=21 ). Richtig heißt es: "befehl 2>datei | ...". MFG Rohan Lean
Rohan Lean wrote:
Am Montag, 19. Juli 2004 17:47 schrieb Thomas Hertweck: Eine hoffentlich richtige Loesung waere
befehl 2>&1 > datei | ...
Nope, leider auch falsch (Warum erfährst du z.B: hier: http://www.linux-tutorial.info/modules.php?name=Tutorial&pageid=21 ). Richtig heißt es: "befehl 2>datei | ...".
Nein! Deine Loesung leitet stderr in die Datei um, das war aber _nicht_ gefragt. Bitte lies noch einmal die urspruengliche Fragestellung: es sollte stdout in eine Datei umgeleitet werden und stderr ueber eine Pipe an ein anderes Programm. Und genau das macht IMHO meine Loesung. Wenn das nicht gesucht war, dann habe ich die urspruengliche Frage falsch verstanden. CU, Th.
Am Montag, 19. Juli 2004 18:47 schrieb Thomas Hertweck:
Nein! Deine Loesung leitet stderr in die Datei um, das war aber _nicht_ gefragt. Stimmt! Sry, ich habe nicht gründlich genug gelesen. Ich habe jetzt übrigens deine Lösung ausprobiert, und sie hat als einziges geklappt. Aber: Warum? Nach meinem Verständnis müsste der Befehl: "befehl >datei 2|..." richtig sein (ist er aber nicht). "Dein" Befehl, von mir kommentiert: "befehl 2>&1>datei | ...".
"2>&1" leitet stderr auf stdout um - laut meinem Wissen zu dem Zeitpunkt noch der Bildschirm (sprich stderr ist der Bildschirm). "1>datei" alles klar... " |..." Was bleibt denn noch zum Redirecten übrig?
Huch, wieso erhalte ich Deine Email gleich drei Mal...? Rohan Lean wrote:
[...] Stimmt! Sry, ich habe nicht gründlich genug gelesen.
Kein Problem, das kommt vor.
Ich habe jetzt übrigens deine Lösung ausprobiert, und sie hat als einziges geklappt. Aber: Warum? Nach meinem Verständnis müsste der Befehl: "befehl >datei 2|..." richtig sein (ist er aber nicht).
Nein, das kann nicht funktionieren, da es keinen Operator "2|" gibt. Ich verstehe allerdings, was Deine Idee dahinter war... Wie ich aber schon schrieb: durch eine Pipe kannst Du _nur_ stdout schicken. Wenn Du also stderr ebenfalls durch eine Pipe hindurch bekommen moechtest, so musst Du stderr vor der Pipe auf stdout umleiten.
"Dein" Befehl, von mir kommentiert: "befehl 2>&1>datei | ...".
"2>&1" leitet stderr auf stdout um - laut meinem Wissen zu dem Zeitpunkt noch der Bildschirm (sprich stderr ist der Bildschirm).
"1>datei" alles klar...
" |..." Was bleibt denn noch zum Redirecten übrig?
Du musst die Sache von links nach rechts lesen und schrittweise ueberlegen, was passiert. Die einzig wirklich schwieriger zu verstehende Sache ist der Unterschied zwischen 1) 2>&1 >datei und 2) >datei 2>&1 Ich weise hier nochmal auf meine Email http://lists.suse.com/archive/suse-linux/2004-Mar/0060.html hin, dort habe ich das ausfuehrlich erklaert mit Beispiel. Lies Dir das mal durch und wenn danach immer noch etwas unklar ist, melde Dich wieder. Gruesse, Th.
Thomas Hertweck, Montag, 19. Juli 2004 17:47:
Nee. Damit landet stderr in der Datei "datei" und stdout wird gepipt zum Programm logger. Das ist nicht das, was gefordert wurde. Eine hoffentlich richtige Loesung waere
befehl 2>&1 > datei | ...
Tut, was ich will, danke.
Wichtig dabei ist die Reihenfolge, denn "2>&1 > datei" macht etwas anderes als "> datei 2>&1", wie ich z.B. in der Email http://lists.suse.com/archive/suse-linux/2004-Mar/0060.html erklaert habe
Sehr lehrreich, wieder was dazu gelernt. Vielen Dank! -- Antworten an lists@feile.net werden in /dev/null archiviert! Bitte ggf. lists... durch mail... ersetzen. Andreas Feile www.feile.net
hallo andreas, Andreas Feile wrote:
Hallo Liste,
ich möchte gern einen Befehl ausführen, und dessen stdout in eine Datei umleiten, stderr hingegen in einen weiteren Befehl pipen. Also im Prinzip sowas:
befehl >> datei | logger
Wobei hier in datei der Standardauswurf landen soll, die Fehler hingegen im Logfile. Hat jemand einen Tip für mich?
befehll 2>>datei | logger ? -- gruss thomas
Am Montag, 19. Juli 2004 14:39 schrieb Andreas Feile:
Hallo Liste,
ich möchte gern einen Befehl ausführen, und dessen stdout in eine Datei umleiten, stderr hingegen in einen weiteren Befehl pipen. Also im Prinzip sowas:
befehl >> datei | logger
Du meinst so etwas?: http://wwwcip.informatik.uni-erlangen.de/old/tree/CIP/Manuals/unix/ shell/umlenkung.html (in einer Zeile) Gruß Harald
Andreas Feile
ich möchte gern einen Befehl ausführen, und dessen stdout in eine Datei umleiten, stderr hingegen in einen weiteren Befehl pipen. Also im Prinzip sowas:
befehl >> datei | logger
befehl 2>&1 1>> datei | logger mahr dazu in man bash Ausgabeumleitung (redirection) Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de
participants (6)
-
Andreas Feile
-
Dr. Jürgen Vollmer
-
Harald_mail@t-online.de
-
Rohan Lean
-
Thomas Fankhauser
-
Thomas Hertweck