Ich verwende dieses Formular, um die Standardausgabe und den Standardfehler in dieselbe Datei umzuleiten.
ls -ld . fred > no_fred 2>&1
Gerade in der Korn-Shell von Red Hat Linux 4 getestet. no_fred enthält:
ls: fred: No such file or directory
drwxrwxr-x 2 user group 1024 Apr 27 17:41 .
">" ist eigentlich 1>, was bedeutet, dass der Dateideskriptor 1 (Standardausgabe) umgeleitet wird. "2>" leitet den Standardfehler um, da Standardfehler der Dateideskriptor 2 ist. "&1" bedeutet "was auch immer Sie mit Dateideskriptor 1 machen". Alles in allem bedeutet dies: "Standardausgabe in eine Datei ausgeben, und Standardfehler zusammen mit ihr".
Ein Vorteil dieser Methode ist, dass Fehlermeldungen an der richtigen Stelle erscheinen. Zum Beispiel erscheinen die Fehlermeldungen eines Compilers für eine Datei, die nicht kompiliert werden konnte, direkt nach dem Kompilierbefehl aus Ihrem Makefile.
Das >>&-Konstrukt kann die Ausgabe des Befehls an die Protokolldatei anhängen und stellt diese in den Hintergrund. Ich bin mir nicht sicher, ob es etwas mit dem Standardfehler macht. Ich habe gerade Bolsky/Korn 1989 konsultiert, und dort steht es nicht einmal drin, also kann vielleicht jemand anderes analysieren, was es tut.
Aktualisierung: Wenn Sie irgendwelche Pipes in Ihrem Befehl haben, dann wird der Standard Fehler der frühen Phasen zuerst erscheinen, da der fehlerverursachende Befehl läuft. Da nur die Standardausgabe durch die Pipe geleitet wird, erscheint sie erscheint alles auf einmal, wenn die gesamte Pipeline abgeschlossen ist.