On Thu, Jul 12, 2018 at 09:09:49AM +0200, Jochen Topf <[email protected]> wrote: > On Wed, Jul 11, 2018 at 09:01:18AM +0200, Rene Terlecki wrote: > > ich habe hier eine kleine Kopfnuss > > mein Ziel ist, den Output eines Befehls in eine Datei zu schreiben, aber nur > > wenn er nicht leer ist > > > > Lösungen mit temporären Dateien und Variablen habe ich bereits gefunden > > allerdings bin ich mir sicher, dass es noch einfachere Ansätze mit Pipen und > > logischen Operatoren gibt > > Ich glaube nicht, dass das rein in der Shell funktionieren kann. Das > Problem ist, dass die Shell die Datei aufmacht, in die umgeleitet wird > und dann den offenen Dateidescriptor an das Programm übergibt, dass den > Output erzeugt. Das Programm schreibt dann einfach da rein. Beim Öffnen > der Datei wird diese aber schon angelegt. > > 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.
Hier hast du eins:
~> cat t.pl
#!/usr/bin/perl
#
#
use strict;
use warnings;
my $file = $ARGV[0];
my $HANDLE = undef;
while(<STDIN>) {
unless(defined($HANDLE)) {
if($file) {
open($HANDLE,">>",$file) or $HANDLE = *STDOUT;
} else {
$HANDLE = *STDOUT;
}
}
print $HANDLE $_;
}
~> echo -n "" | perl t.pl /tmp/foo
~> cat /tmp/foo
cat: /tmp/foo: No such file or directory
~> echo "foo" | perl t.pl /tmp/foo
~> cat /tmp/foo
foo
~>
Ciao,
Thomas
--
Thomas Köhler Email: [email protected]
<>< WWW: http://gott-gehabt.de
IRC: tkoehler Freenode: thkoehler
PGP public key available from Homepage!
signature.asc
Description: Digital signature
