Heiko Schlittermann <[email protected]> (Do 12 Jul 2018 14:50:20 CEST):
> Jochen Topf <[email protected]> (Do 12 Jul 2018 09:09:49 CEST):
> > Die Lösung ist relativ einfach mit einem externen Programm zu erledigen,
> > das quasi wie "cat" funktioniert, also Daten einfach durchleitet, aber
> > die Ausgabedatei selbst aufmacht und zwar erst dann, wenn zum ersten Mal
> > Daten ankommen. Ich weiß von keinem Programm, dass das macht, aber es
> > ist auch nicht schwierig, sowas zu schreiben.
>
>     #!/bin/bash
>     read || exit
>     test $# = 1  && exec 1>"$1"
>     printf '%s\n' "$REPLY"
>     exec cat

Hier noch einer mit Perl:

    perl -e 'sysread(STDIN, $_, 1) or exit 0; open(STDOUT, ">", shift); print; 
exec "cat"'

Oder als Script etwas leserlicher:

    #!/usr/bin/perl
    sysread(STDIN, $_, 1) or exit 0;
    open(STDOUT, '>', shift // die "$0: Need a file name");
    print;
    exec 'cat';

Oder Pure Perl, aber das hatte Thomas schon, mit Fehlerbehandlung left
as an excercise to the reader ;)

    #!/usr/bin/perl
    die "Usage: $0 FILE\n" unless @ARGV == 1;
    $/ = \4096;             # use 4k chunks, not line by line
    defined($_ = <STDIN>)
    and open(STDOUT, '>', shift)
    and print
    and print while <STDIN>;

--
Heiko

Attachment: signature.asc
Description: PGP signature

Antwort per Email an