[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Ausgabeumleitung funktioniert (mal wieder) nicht



Andreas Pakulat <apaku@gmx.de> wrote: 
> On 09.11.05 15:27:36, Ulrich Fürst wrote:
> > Andreas Pakulat <apaku@gmx.de> 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.

O.k.
 
> 
> 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.

Ich geh jetzt einfach mal bis zum Beweis des Gegenteils davon aus, das
dem so ist. ;-)


> > 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, 

So versteh ich eben den Abschnitt in der Manpage (steht m.E. fast
wörtlich so drin:
  _______
 /
| ls > dirlist 2>&1 
| 
|  directs both standard output and standard error to the file dirlist,
| while the command 
| 
|  ls 2>&1 > dirlist 
| 
|  directs only the standard output to file dirlist, because the
|  standard error was duplicated as standard output before the standard
                      ^^^^^^^^^^
|  output was redirected to dirlist. 
 \_______ 

Klingt jetzt beim nochmaligen lesen wie Deine Erklärung oben.


> > 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.

Darum ja die Formulierung "für mich klingt das so". 

Also eher wie bei Variablen (sind STD[OUT|ERR] nicht sogar welche?), wo
ja auch die Reihenfolge entscheidend ist:
bei gegeben:
a=1
b=2
c=3
jetzt ergibt
a:=b
b:=c
a=2; b=3
mache ich aber
b:=c
a:=b
ergibt sich
a=3; b=3

Kann ich mir das eher so Vorstellen?

Ulrich

P.S. Danke für die Geduld!



Reply to: