Pergunta

Eu gostaria de registrar a saída de um comando para stdout, bem como para um arquivo de log. Eu tenho Cygwin instalado e eu estou tentando usar o comando tee para alcançar este objetivo.

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

O problema é que tee parece insistir em espera para o final do arquivo antes de emitir qualquer coisa a qualquer stdout ou o arquivo de log. Isso tira o ponto de tudo isso, o que é ter um arquivo de log para referência futura, mas também alguns logging stdout para que eu possa ver o progresso de construção.

Opções de tee parecem estar limitados a --append, --ignore-interrupts, --help e --version. Então, há outro método para obter o que estou tentando fazer?

Foi útil?

Solução

T parece insistir em espera para o final do arquivo antes de emitir qualquer coisa a qualquer stdout ou o arquivo de log.

Este definitivamente não deve estar acontecendo - que tornaria tee quase inútil. Aqui está um teste simples que eu escrevi que põe isso à prova, e definitivamente não está esperando por EOF.

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

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

Outras dicas

Você pode saída para o arquivo e tail -f arquivo.

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

tail -f build.log

Escreva a sua própria! (O ponto aqui é que a definição autoflush ($|) está ligado, então cada linha visto é liberado imediatamente. Isto talvez possa ser o que faltava o verdadeiro comando tee.)

#!/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;

Você pode chamar o script que quiser. Eu chamo-lhe perlmilktee! :-P

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top