it-swarm.com.de

Wie bekomme ich die Ausgabe eines Skripts / Programms in eine Datei?

Ich kompiliere ein Programm mit make und möchte, dass die Ausgabe von make in eine Datei geschrieben wird. Ich habe versucht mit> Operator wie

make > build_log.txt

und mit tee Befehl wie

make | tee build_log.txt

das Problem ist jedoch, dass ein Teil der Ausgabe in die Datei fließt, der Rest jedoch weiterhin auf dem Bildschirm angezeigt wird.

Ich kann einfach den Text vom Terminal in eine Datei kopieren/einfügen, nachdem make ausgeführt wurde, aber das ist keine Lösung.

Meine Frage ist also, wie speichere ich die gesamte Ausgabe in eine Datei, so dass sie nur in eine Datei aufgenommen wird, ohne auf dem Bildschirm zu erscheinen.

6
binW

Der im Terminal angezeigte Text stammt aus dem Stream stderr (2). Wenn Sie nur _make > build_log.txt_ ausführen, wird nur der Stream stdout (1) in die Datei _build_log.txt_ umgeleitet.

  • stdout ist der Standardausgabestream und hat die Dateideskriptornummer 1. Dies ist der Standardstream, der in Shells umgeleitet wird.
  • stderr ist der Standardfehlerstrom und hat die Dateideskriptornummer 2

Um den stderr -Stream auch in diese _build_log.txt_ -Datei umzuleiten, verwenden Sie:

_make > build_log.txt 2>&1
_
  • make wird ausgeführt und
    • der Stream stdout wird umgeleitet (_>_) zu _build_log.txt_
    • der Stream stderr wird umgeleitet (_2>_) zu dem Stream stdout (_&1_), der umgeleitet wurde zu _build_log.txt_

Die Reihenfolge ist wichtig, Sie können die Umleitungsoperatoren wie _make 2>&1 > build_log.txt_ nicht umschalten.

Alternativer Befehl:

_make 2>&1 | tee build_log.txt > /dev/null
_

Die Umleitung nach _/dev/null_ wird benötigt, um die Ausgabe zu verbergen. tee schreibt die Eingabe nach _build_log.txt_ und gibt sie ebenfalls aus.

10
Lekensteyn