2022 Stimmen

Wie man mit der Bash sowohl die Standardausgabe als auch den Standardfehler in eine Datei umleitet und anhängt

Umleiten Standardausgabe zu einer abgeschnittenen Datei in Bash, weiß ich zu verwenden:

cmd > file.txt

Um die Standardausgabe in der Bash umzuleiten und an eine Datei anzuhängen, weiß ich, wie man das macht:

cmd >> file.txt

Um sowohl die Standardausgabe als auch die Standardfehler zu einer abgeschnittenen Datei, weiß ich zu verwenden:

cmd &> file.txt

Wie kann ich sowohl die Standardausgabe als auch die Standardfehlerausgabe in eine Datei umleiten? cmd &>> file.txt hat bei mir nicht funktioniert.

2565voto

Alex Martelli Punkte 805329
cmd >>file.txt 2>&1

Die Bash führt die Umleitungen von links nach rechts wie folgt aus:

  1. >>file.txt : Öffnen Sie file.txt im Anfügemodus und Weiterleitung stdout dort.
  2. 2>&1 : Umleitung stderr a "wo stdout läuft derzeit" . In diesem Fall handelt es sich um eine im Anfügemodus geöffnete Datei. Mit anderen Worten, die &1 verwendet den Dateideskriptor wieder, der stdout derzeit verwendet.

493voto

TheBonsai Punkte 13897

Abhängig von Ihrer Bash-Version gibt es zwei Möglichkeiten, dies zu tun.

Der klassische und tragbare ( Bash vor 4 ) Weg ist:

cmd >> outfile 2>&1

Ein nicht tragbarer Weg, beginnend mit Bash 4 ist

cmd &>> outfile

(analog zu &> outfile )

Für einen guten Kodierungsstil sollten Sie

  • Entscheiden Sie, ob die Übertragbarkeit eine Rolle spielt (dann verwenden Sie den klassischen Weg)
  • entscheiden, ob die Übertragbarkeit auch auf Bash pre-4 ein Anliegen ist (dann den klassischen Weg wählen)
  • egal, welche Syntax Sie verwenden, ändern Sie sie nicht innerhalb desselben Skripts (Verwirrung!)

Wenn Ihr Skript bereits mit #!/bin/sh (egal ob beabsichtigt oder nicht), dann ist die Bash-4-Lösung und generell jeder Bash-spezifische Code nicht der richtige Weg.

Denken Sie auch daran, dass Bash 4 &>> ist nur eine kürzere Syntax - sie führt keine neue Funktionalität oder ähnliches ein.

Die Syntax ist (neben anderen Umleitungssyntaxen) in der Bash-Hacker-Wiki .

121voto

Aaron R. Punkte 3154

In der Bash können Sie auch explizit Ihre Umleitungen zu verschiedenen Dateien angeben:

cmd >log.out 2>log_error.out

Das Anhängen wäre:

cmd >>log.out 2>>log_error.out

105voto

Pradeep Goswami Punkte 1565

Das sollte gut funktionieren:

your_command 2>&1 | tee -a file.txt

Es speichert alle Protokolle in file.txt als auch im Terminal abladen.

76voto

A B Punkte 1926

In Bash 4 (wie auch in Z-Muschel ( zsh ) 4.3.11):

cmd &>> outfile

gerade aus dem Karton.

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