stderr in stdout und Datei leiten

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von uhbuntuh, 04.01.2009.

  1. #1 uhbuntuh, 04.01.2009
    uhbuntuh

    uhbuntuh Jungspund

    Dabei seit:
    26.09.2007
    Beiträge:
    12
    Zustimmungen:
    0
    Hallo!
    Zur Zeit werden Fehler meines Programmes zur stdout geleitet, stdout und stderr werden angezeigt und in eine Logdatei geschrieben.

    Code:
    command 2>&1 | tee $logfile
    Nun möchte ich aber sdterr ZUSÄTZLICH in eine Error-Log-Datei schreiben. Wie bekomme ich das hin?

    Vielen Dank im voraus!
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. larry

    larry Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    159
    Zustimmungen:
    0
    command 2> errlog &> log
    für die zsh oder solls ne andere Shell sein?
     
  4. #3 uhbuntuh, 04.01.2009
    uhbuntuh

    uhbuntuh Jungspund

    Dabei seit:
    26.09.2007
    Beiträge:
    12
    Zustimmungen:
    0
    nutze bash.
     
  5. larry

    larry Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    159
    Zustimmungen:
    0
    bash kann das nicht
     
  6. #5 floyd62, 04.01.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi,

    warum soll die bash das nicht können?

    Code:
    ( ( ./command | tee STDOUT ) 3>&2 2>&1 1>&3 | tee STDERR ) 2>&1 | tee EVERYTHING
    
    ;-)
     
  7. defcon

    defcon Kaiser
    Moderator

    Dabei seit:
    22.08.2005
    Beiträge:
    1.486
    Zustimmungen:
    1
    Ort:
    Bruchsal
    Wo hast Du das denn her?
    Wie kommst Du überhaupt auf 3? Es gibt nur die Kanäle 0,1 und 2.
     
  8. #7 larry, 04.01.2009
    Zuletzt bearbeitet: 04.01.2009
    larry

    larry Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    159
    Zustimmungen:
    0
    Bash kann das nicht :-P , hab aber nicht gesagt, dass es keine Lösung gibt. Du löst das ganze mit Hilfe von anderen Programmen.
    Aber schicke Lösung ;)

    Edit: mit 3>&2 speichert er sich den Fd 2 in 3 und so weiter und so fort :-)
     
  9. defcon

    defcon Kaiser
    Moderator

    Dabei seit:
    22.08.2005
    Beiträge:
    1.486
    Zustimmungen:
    1
    Ort:
    Bruchsal
    Was bringt das jetzt wenn er nunmal die Bash nutzt? Also bring auch bitte Vorschläge die auch mit der Bash lösbar sind.
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. larry

    larry Tripel-As

    Dabei seit:
    27.11.2007
    Beiträge:
    159
    Zustimmungen:
    0
    Bei meinem ersten Post wusste ich nicht, dass er die Bash nutzt ...
    Bei meinem letzten Post wollte ich nur anmerken, dass die Bash kein multiples Umleiten a la
    Code:
    echo test >file1 >file2 >file3 >file4 >file5 >file6
    kann.
    Seine Lösung ist trickreich, nicht besonders übersichtlich, aber hey, sie funktionert. Ist doch gut.
     
  12. #10 floyd62, 05.01.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    @defcon:

    "Wo hast du das denn her?" -- Naja, Shell-Programmierung seit 1983 ;-)

    "Es gibt nur die Kanäle 0, 1 und 2" -- kein Kommentar ...

    "... Vorschläge die auch mit der Bash lösbar sind." -- funktioniert so in der Original-Bourne-Shell, der Korn Shell und der Bash ... _noch mehr_ interessiert mich selten ...


    und @larry:

    "andere Programme" ... "tee" war ja bereits in der ursprünglichen Anfrage verwendet, da dachte ich, ich darf das auch ;-) ... Wenn die ganzen Ausgaben nicht auch auf dem Bildschirm erfolgen sollen, geht natürlich auch ein einfaches

    Code:
    command >$logfile 2>$errfile
    
    Ich kann also durchaus auch in der Bash verschiedene FDs in unterschiedliche Dateien umlenken. Die dabei erzeugten Dateien $logfile und $errfile enthalten dann aber jeweils separat nur das, was "command" auf stdout bzw. stderr ausgibt.

    In deinem Beispiel würde die Shell zunächst den Output (stdout) von "echo test" in die Datei file1 umlenken versuchen (dabei eine Datei file1 erzeugen), den FD 1 dann nach file2 etc. umbiegen, bis er letztendlich auf file6 zeigt. Da das alles passiert, _bevor_ das Kommando selbst endlich aufgerufen wird, dürfte das Endergebnis schliesslich eine Reihe von leeren Dateien file1 bis file5 sein, und eine Datei file6, in der "test" steht ...

    Gruesse ...
     
Thema:

stderr in stdout und Datei leiten

Die Seite wird geladen...

stderr in stdout und Datei leiten - Ähnliche Themen

  1. stderr auf stdout "kopieren", soll dann bei beidem ausgabe erfolgen

    stderr auf stdout "kopieren", soll dann bei beidem ausgabe erfolgen: Hi, wget gibt ja standardmäßig auf stderr ausgaben. das möchte ich auch so beibehalten, allerdings möchte ich die selben ausgaben auch auf...
  2. make-output:stderr auf stdout umleiten

    make-output:stderr auf stdout umleiten: Hi, rufe ich makeauf kommt da eine ganze Lawine von Fehlermeldungen. Leite ich aber die Ausgabe von make in ein logfile stehen da nur ein...
  3. STDERR bei Background job

    STDERR bei Background job: Hallo zusammen, ich habe in meinem Script eine Prüfung, ob ein bestimmtes Script nach einer Zeit beendet ist. Ist das nicht der Fall, wird es...
  4. Ausgabe auf stderr unter AIX.

    Ausgabe auf stderr unter AIX.: Hi alle, ich möchte Fehlermeldungen auf die Konsole ausgeben. Leider gibt es kein /dev/stdout oder /dev/stderr auf AIX, daher frage ich mich,...
  5. redirect socket zu stderr?

    redirect socket zu stderr?: hiho beim starten von einem prog kann ich ja einen descriptor zu einen anderen weiterleiten z.b. ./myprog 2>&1 also stderr nach stdout...