Question

Je souhaite consigner la sortie d'une commande dans stdout ainsi que dans un fichier journal. Cygwin est installé et j'essaie d'utiliser la commande tee pour accomplir cela.

devenv mysolution.sln /build myproject "Release|Win32" | tee build.log
Le problème est que tee semble insister pour attendre la fin du fichier avant de générer quoi que ce soit dans stdout ou dans le fichier journal. Cela enlève tout intérêt à cela, qui est d'avoir un fichier journal pour référence future, mais aussi une certaine journalisation stdout afin que je puisse facilement voir la progression de la construction.

Les options de

tee semblent être limitées à - append , - ignore-interrupts , - help et - version . Y a-t-il une autre méthode pour arriver à ce que j'essaie de faire?

Était-ce utile?

La solution

  

tee semble insister pour attendre le   fin du fichier avant de sortir quoi que ce soit   sur la sortie standard ou le fichier journal.

Cela ne devrait absolument pas se produire - cela rendrait le tee presque inutile. Voici un test simple que j'ai écrit qui met cela à l'épreuve, et il n'attend certainement pas eof.

$ cat test
#!/bin/sh
echo "hello"
sleep 5
echo "goodbye"

$ ./test | tee test.log
hello
<pause>
goodbye

Autres conseils

Vous pouvez exporter dans le fichier et suivre -f le fichier.

devenv mysolution.sln / build myproject " Publication | Win32 " > build.log & amp;

tail -f build.log

Ecrivez le vôtre! (Le point ici est que le paramètre autoflush ( $ | ) est activé, donc chaque ligne vue est immédiatement supprimée. C'est peut-être ce qui manquait à la vraie commande tee .)

#!/usr/bin/perl -w
use strict;
use IO::File;
$| = 1;
my @fhs = map IO::File->new(">

Ecrivez le vôtre! (Le point ici est que le paramètre autoflush ( $ | ) est activé, donc chaque ligne vue est immédiatement supprimée. C'est peut-être ce qui manquait à la vraie commande tee .)

<*>

Vous pouvez appeler le script comme bon vous semble. Je l'appelle perlmilktee ! :-P

"), @ARGV; while (my $line = <STDIN>) { print $line;

Ecrivez le vôtre! (Le point ici est que le paramètre autoflush ( $ | ) est activé, donc chaque ligne vue est immédiatement supprimée. C'est peut-être ce qui manquait à la vraie commande tee .)

<*>

Vous pouvez appeler le script comme bon vous semble. Je l'appelle perlmilktee ! :-P

->print($line) for @fhs; }

Ecrivez le vôtre! (Le point ici est que le paramètre autoflush ( $ | ) est activé, donc chaque ligne vue est immédiatement supprimée. C'est peut-être ce qui manquait à la vraie commande tee .)

<*>

Vous pouvez appeler le script comme bon vous semble. Je l'appelle perlmilktee ! :-P

->close for @fhs;

Vous pouvez appeler le script comme bon vous semble. Je l'appelle perlmilktee ! :-P

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top