780 Stimmen

Wie schreibe ich einen Standardfehler in eine Datei, während ich "tee" mit einer Pipe verwende?

Ich weiß, wie man tee um die Ausgabe zu schreiben ( Standardausgabe ) von aaa.sh a bbb.out und wird dennoch im Terminal angezeigt:

./aaa.sh | tee bbb.out

Wie würde ich jetzt auch schreiben Standardfehler in eine Datei namens ccc.out und trotzdem angezeigt wird?

1voto

user2565854 Punkte 11

Danke lhunath für die Antwort in POSIX.

Hier ist eine komplexere Situation, die ich in POSIX mit der richtigen Lösung brauchte:

# Start script main() function
# - We redirect standard output to file_out AND terminal
# - We redirect standard error to file_err, file_out AND terminal
# - Terminal and file_out have both standard output and standard error, while file_err only holds standard error

main() {
    # my main function
}

log_path="/my_temp_dir"
pfout_fifo="${log_path:-/tmp}/pfout_fifo.$$"
pferr_fifo="${log_path:-/tmp}/pferr_fifo.$$"

mkfifo "$pfout_fifo" "$pferr_fifo"
trap 'rm "$pfout_fifo" "$pferr_fifo"' EXIT

tee -a "file_out" < "$pfout_fifo" &
    tee -a "file_err" < "$pferr_fifo" >>"$pfout_fifo" &
    main "$@" >"$pfout_fifo" 2>"$pferr_fifo"; exit

0voto

Steven Lee Punkte 345

Kompilierungsfehler, die an den Standardfehler gesendet werden ( STDERR ) können umgeleitet oder in einer Datei gespeichert werden von:

Bash:

gcc temp.c &> error.log

C-Muschel ( csh ):

% gcc temp.c |& tee error.log

Siehe: Wie kann ich Kompilierungs-/Build-Fehler in eine Datei umleiten?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X