On 09.11.05 15:27:36, Ulrich Fürst wrote: > Andreas Pakulat <[EMAIL PROTECTED]> wrote: > > > > Genau das hatte Frank beschrieben, wenn auch nicht so richtig gut. > > 2>&1 leitet stderr auf stdout um, was in dem Moment noch dein Terminal > > ist. Erst danach leitest du stdout in eine Datei um. > > Eigentlich funktionieren die beiden redirects zeitgleich?
Nein ebend nicht. > Wenn ja, warum macht die Reihenfolge dann einen Unterschied? s.o. > Wenn nein, dann dürfte sich der Unterschied doch eher auf millisekunden > beschränken, so dass z.B. der erste Fehler, so er gleich am Anfang > kommt, auf stdout ankommt und dann aber alles weiter doch in die Datei? Aehm, _ich_ vermute ohne die Innereien der Bash zu kennen, das folgendes passiert: Bash parst die Kommandozeile und stoest auf das Konstrukt "2>", sie merkt das eine Umleitung sich anschliesst und liest alles bis zum naechsten " " ein. Jetzt steht da &1, also eine Referenz auf stdout, die Bash nimmt nun den Filedescriptor von stdout und erzeugt einen neuen Filedescriptor fuer stderr der auf dasselbe Ziel zeigt (sprich das Terminal), dann parst sie weiter und finde ">" oder "1>" und macht dasselbe nochmal, nur diesmal erzeugt sie einen neuen Filedescriptor fuer stdout der auf /dev/null zeigt. Der Filedescriptor von stderr zeigt aber immernoch auf /dev/ttyX, nicht auf /dev/null, sprich du siehst alle Fehlermeldungen, aber keine einzige von den normalen Ausgaben. > > Aber das steht > > auch in der manpage der Bash - "order matters". > Ja, weiß ich, nur verstehe ich noch nicht ganz wie und warum. s.o. stderr ist halt ein Filedescriptor auf die Datei auf die stdout vor seiner Umleitung gezeigt hat. > Also, in "ls > dirlist 2>&1" sind zwei getrennte redirects. > Das "2>&1" leitet dabei stderr auf stdout um. > in "ls 2>&1 > dirlist" sind ebenfalls zwei getrennte redirects. > Aber das "2>&1" leitet nur eine Kopie um? Nein, du musst bedenken, dass die Shell das parsen muss - was i.A. von links nach rechts passiert, und dabei dann sequentiell die Filedescriptoren von stdout und stderr aendern, wenn stderr vor stdout geaendert wird zeigt es halt auf das "alte" stdout. > Ist das so gedacht, das zwei identische Ausdrücke kontextabhängig > verschiedenes tun? Oder hab' ich da immer noch einen Denk-Fehler? Das steht in der Manpage und duerfte einfach am Parser der Shell liegen, wenn der hier zuerst eine Umformung machen wuerde wuerde das klappen. > P.S. Für mich klingt das so als wenn ich woanders rauskomme je nachdem, > ob ich erst 2 Meter vor und dann 3 Meter zu Seite laufe oder > umgekehrt?!? Der Vergleich hinkt. Andreas -- You're almost as happy as you think you are. -- Haeufig gestellte Fragen und Antworten (FAQ): http://www.de.debian.org/debian-user-german-FAQ/ Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED] mit dem Subject "unsubscribe". Probleme? Mail an [EMAIL PROTECTED] (engl)

