Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » Pipes zusammenführen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
02.09.2005, 11:42 Uhr
Disi



Virtual:

Soweit ich die Frage gelesen habe suchte er nach einer möglichkeit den stderror in den stdout umzuleiten oder?

Das die 1 redundant ist war mir klar ich wollte es ja auch nur nochmal verdeutlichen

mfg

Disi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
02.09.2005, 13:23 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von Disi:
Virtual:

Soweit ich die Frage gelesen habe suchte er nach einer möglichkeit den stderror in den stdout umzuleiten oder?


Nochmal:

Code:
prog 2>&1 1> bla


Geht man mal vom trivialen Fall aus, daß initial stderr und stdout auf /dev/tty gemappt sind, was bei allen Programmen zutrifft, welche ich in einer Shell eingebe, dann wird durch "2>&1" auf /dev/tty "umgeleitet" (da war es aber bereits eh schon) und anschliessend leitet "1>bla" lediglich stdout erneut um.
Geht man also von diesem trivialen Fall aus, so ist obige von Dir beschriebene Zeile nix anderes als

Code:
prog >bla


Geht man von dem spezielleren Fall aus, daß das Programm von einem anderen Programm gesteuert wird und stdout ursprünglich nach out, stderr nach err umgeleitet wurden, so wird durch

Code:
prog 2>&1 1> bla


erreicht, daß out nunmehr die Fehlermeldungen enthält, err leer bleibt und bla die Standardausgabe enthält.

Wie man es dreht und wendet: wenn man zuerst stdout/stderr zusammenlegt und anschliessend stdout erneut umlenkt, hat man immer zwei getrennte Ausgaben welche nicht problemlos synchronisierbar sind. Zum Beleg kannst Du ja mal mit dem zuvor von mir geposteten Shelscript die unterschiedlichen Kombinationen ausprobieren. Lediglich die Kombination

Code:
prog >bla 2>&1


wird dich dazu bringen, daß stdout und stderr wirklich einen gemeinsamen Stream bilden. Allerdings bleibt eben nach wie vor die Aufgabe vom Fragesteller ungelöst: er will ja, daß in diesem gemeinsamen Stream erkennbar ist, woher es im original her kam.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
02.09.2005, 14:43 Uhr
imhotep
followed the white rabbit


das mit dem Umleiten ist mir schon klar, was interessant wär, wenn man makieren könnte, was von stderr und was von stdout stammt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
02.09.2005, 17:01 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich möchte Fast ausschließen, daß dies zuverlässig geht, wenn - wie du beschreibst - die Ausgaben schnell hintereinander erfolgen:
Wie auch immer Du letztlich eine gemeinsame Datei erzeugst, so musst Du ja aus zwei gleichzeitig lesen. Wenn Du jetzt also zB grade eine Ausgabe von stdout gelesen hast und es in die gemeinsame Datei schreibst, dann kann das Programm, dessen Ausgaben du abfängst ungestört weiterlaufen und weitere daten nach stdout und stderr schreiben. Dh wenn Du das nächste mal guckst, ob das Programm für eine der beiden Ausgabekanäle Daten produziert hat (das macht man normalerweise mit den Systemcalls select oder poll) und für beide Kanäle Daten anliegen, gibt es keinen Weg herauszubekommen, welche Daten zuerst da waren.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
02.09.2005, 21:25 Uhr
imhotep
followed the white rabbit


Das mit dem poll/select hab ich auch schon gehabt, nur da gibt es ein Problem, ich weiß nicht wieviele Zeile die Ausgabe war oder wieviel geschrieben wurde. Hab es versucht, einfach jedes mal zum Beispiel 1000 Zeichen zu lesen, aber da hing mein Programm.
Hab mal versucht, eine Programm mit 2 Threads, die jeweils eine Pipe Zeilenweise lesen, aber das war fehlerhaft, wenn die Ausgabe zu schnell war.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
03.09.2005, 10:09 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


select liefert dir doch die menge an daten die anliegt
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: