2008-09-20 8 views
3

Je voudrais enregistrer la sortie d'une commande à stdout ainsi qu'à un fichier journal. J'ai Cygwin installé et j'essaye d'utiliser la commande tee pour accomplir ceci.La commande tee attend-elle toujours EOF?

devenv mysolution.sln /build myproject "Release|Win32" | tee build.log 

Le problème est que tee semble insister sur attendre la fin du fichier avant de sortir quoi que ce soit soit stdout ou le fichier journal. Cela enlève le point de tout cela, qui est d'avoir un fichier journal pour référence future, mais aussi quelques enregistrements stdout afin que je puisse facilement voir la progression de la construction.

tee les options de » semblent se limiter à --append, --ignore-interrupts, --help et --version. Alors, y a-t-il une autre méthode pour arriver à ce que j'essaie de faire?

Répondre

1

tee semble insister sur attendre la fin de fichier avant d'afficher quelque chose soit stdout ou le fichier journal.

Cela ne devrait certainement 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 pas forcément l'eof.

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

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

@ Jon: Oui, il semble que mon problème était en fait avec devenv.exe les choses étouffer en quelque sorte quand il est la construction d'une grande solution. J'ai essayé d'utiliser mon propre remplacement de tee et il a eu le même problème. – Owen

4

Vous pouvez éditer le fichier et sauvegarder le fichier.

devenv mysolution.sln/build myproject "Release | Win32"> build.log &

tail -f build.log

+0

WinTail est également possible – mana

2

Écrivez votre propre! (Le point ici est que le autoflush ($|) paramètre est activé, de sorte que chaque ligne vue est loin rincée droite. Cela peut peut-être ce que la vraie commande tee manquait.)

#!/usr/bin/perl -w 
use strict; 
use IO::File; 
$| = 1; 
my @fhs = map IO::File->new(">$_"), @ARGV; 
while (my $line = <STDIN>) { 
    print $line; 
    $_->print($line) for @fhs; 
} 
$_->close for @fhs; 

Vous pouvez appeler le tout script tu veux. Je l'appelle perlmilktee! :-P

Questions connexes