Команда tee всегда ждет EOF? - PullRequest
       16

Команда tee всегда ждет EOF?

4 голосов
/ 20 сентября 2008

Я бы хотел записать вывод команды в stdout, а также в файл журнала. У меня установлен Cygwin, и я пытаюсь использовать команду tee для этого.

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

Проблема в том, что tee, похоже, настаивает на ожидании конца файла, прежде чем выводить что-либо в stdout или файл журнала. Это лишает смысла все: наличие файла журнала для справки в будущем, а также некоторые записи stdout, чтобы я мог легко видеть ход сборки.

Опции

tee ограничены --append, --ignore-interrupts, --help и --version. Так есть ли другой способ добраться до того, что я пытаюсь сделать?

Ответы [ 3 ]

4 голосов
/ 20 сентября 2008

Вы можете вывести в файл и указать -f файл.

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

tail -f build.log

2 голосов
/ 20 сентября 2008

тройник, кажется, настаивает на ожидании конец файла перед выводом чего-либо либо в стандартный вывод, либо в файл журнала.

Это определенно не должно происходить - это сделает чай почти бесполезным. Вот простой тест, который я написал, который проверяет это, и он определенно не ждет eof.

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

$ ./test | tee test.log
hello
<pause>
goodbye
2 голосов
/ 20 сентября 2008

Напишите свой собственный! (Дело в том, что параметр автозаполнения ($|) включен, поэтому каждая видимая строка стирается сразу. Возможно, это то, чего не хватало реальной команде 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;

Вы можете вызывать скрипт как угодно. Я называю это perlmilktee! : -Р

...