Re: redirection

From: Manfred Lotz <manfred.lotz(at)web.de>
Date: Fri, 7 Jan 2005 17:43:38 +0100

On Fri, 7 Jan 2005 10:54:17 +0100 (CET)
Oliver Fromme <olli(at)lurza.secnetix.de> wrote:

> Manfred Lotz <manfred.lotz(at)web.de> wrote:
> > Ich leite in einem Script output um in eine Datei (appending),z.B.
> >
> > echo "one important line: $somevar" >> /somepath/mylog
> > 2>&1
>
> Das "2>&1" solltest Du besser weglassen.
>

Ja klar. echo schreibt ja auch sowieso nur auf stdout.

> > Was passiert, wenn das Script von mehreren zur gleichen Zeit
> > aufgerufen wird. Wird das Anhängen an die Datei irgendwie
> > serialisiert oder kann da Output verloren gehen?
>
> Output geht mit Sicherheit nicht verloren (das garantiert
> das Flag O_APPEND, das beim Anhängen mit ">>" verwendet
> wird).
>
> Die Frage ist nur, ob die Ausgaben durcheinander kommen
> können, oder ob jede ausgegebene Zeile auch eine eigene
> Zeile in der Logdatei bleibt. Wenn die Zeilen, die Du mit
> echo ausgibst, kürzer sind als die Default-stdio-Buffer-
> größe, dann klappt es, weil der Schreibzugriff dann ein
> einzelnes, atomares write(2) ist, anderenfalls besteht die
> Möglichkeit, daß Zeilen gemischt werden.
>
> Die Buffer-Größe wiederum richtet sich nach dem Dateisy-
> stem, auf dem sich die Datei befindet, in die Du schreibst.
> Bei FreeBSD's UFS ist das per Default 8 Kbyte. Wenn Du da-
> gegen in eine Pipe schreibst, ist der Default 1 Kbyte (wie-
> derum bei FreeBSD; bei anderen Systemen kann die Größe an-
> ders sein). Das ist auch der Grund, warum folgende beiden
> Kommandos sich unterschiedlich verhalten können:
> $ echo "$BLABLABLA" >> foo
> $ echo "$BLABLABLA" | cat >> foo
> Man sollte immer besser ersteres machen (ohne cat) wegen
> des größeren Buffers. Außerdem spart es einen überflüssi-
> gen Prozeß, einen überflüssigen Filedescriptor und eine
> überflüssige Pipe, die die ganzen Daten noch mindestens
> zweimal (überflüssig) herumkopiert.
>
> Langer Rede kurzer Sinn: Wenn Deine Zeilen hinreichend
> kurz sind, gibt es keine Probleme.
>

Die Zeilen sind kurz, max. 200 Bytes pro Zeile. Dann sollte es also
gehen.

-- 
Danke,
Manfred
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 07 Jan 2005 - 17:45:15 CET

search this site