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

Re: Ausgabeumleitung funktioniert (mal wieder) nicht



"Ulrich Fürst" <fuerst.ulrich@vr-web.de> wrote:

> Das war mir bisher nicht klar. Ich dachte das das so läuft, dass stderr
> mit stdout zusammengeführt wird und das ganze dann nach /dev/null
> umgleitet wird. Aber so wie ich das jetzt verstehe, stimmt das zwar erst
> mal. Nur muss erst stdout nach /dev/null und dann stderr nach stdout
> umgeleitet werden!?
>
> Nachdem ich das jetzt (hoffentlich) verstanden habe, kann
> ich mir das vielleicht auch endlich mal merken!

Ich habe jedesmal Mühe, mir die Erklärung zu merken;  mittlerweile weiß
ich die Befehle auswendig...

cdrecord $args 2>&1 >/dev/null

2>&1 verbindet den Programm-Ausgabekanal 2 (stderr) mit dem Shell-Kanal
1, das ist normalerweise dein Terminal.  Aber danach wird der
Shell-Kanal 1 (>/dev/null ist ja kurz für 1>/dev/null) mit dem
Nulldevice verknüpft, und alles verschwindet.  Andersherum

cdrecord $args  >/dev/null 2>&1

wird der Programm-Ausgabekanal 1 (stdout) auf das Nulldevice geleitet,
und danach wird stderr auf den Shell-Ausgabekanal 1 umgeleitet - wo
mittlerweile nichts mehr ankommt, außer eben dem "nachträglich
eingeleiteten" stderr.

Man kann das übrigens weitertreiben und einen dritten Filedescriptor
einführen.  So kannst du stderr und stdout von cdrecord in eine Datei
umleiten, ungetestet:

echo "ich bin das Skript"
echo "Fehler im Skript" >2
cdrecord 3>~/.cdrecord-vom-script.log 1>&3 2>&3

Gruß, Frank


-- 
Frank Küster
Inst. f. Biochemie der Univ. Zürich
Debian Developer



Reply to: