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: