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

Re: Ausgabeumleitung funktioniert (mal wieder) nicht



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

So ungefaehr ist das mit ziemlicher Sicherheit, denn allzuviele
Moeglichkeiten in eine Datei (/dev/tty ist auch nur ne Datei) bietet die
libc6 nunmal nicht.

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

Naja, das fast ists halt, deine Formulierung oben musst du nur so
aendern dass dort steht 

in "ls 2>&1 > dirlist" sind ebenfalls zwei getrennte redirects.
Aber das "2>&1" leitet nur _in_ eine Kopie _von 1_ um?

> Also eher wie bei Variablen (sind STD[OUT|ERR] nicht sogar welche?), wo

Korrekt, stdout, stderr und stdin sind 3 Variablen die beim Start eines
Programms auf 3 verschiedene "Dateien" zeigen, stdout auf das Terminal
bzw. die Pipe falls vorhanden, stderr aufs Terminal (auch bei Nutzung
einer Pipe) und stdin auf eine Art Input-Device (da kenn ich mich nun
nicht soo aus). Mit x>&y fuehrst du eine Umdefinierung durch, stdx zeigt
dann auf diesselbe Datei wie stdy. Wenn du danach stdy aenderst zeigt
stdx immernoch auf die "alte" Datei von stdy.

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

Korrekt. Genau das passiert auch, nur statt mit Integern mit
Filedeskriptoren.

Andreas

-- 
The whole world is a tuxedo and you are a pair of brown shoes.
		-- George Gobel



Reply to: