Я хочу записывать вывод команды в stdout, а также в файл журнала. У меня установлен Cygwin, и я пытаюсь использовать для этого команду tee.
devenv mysolution.sln /build myproject "Release|Win32" | tee build.log
Проблема в том, что tee, кажется, настаивает на ожидании конца файла, прежде чем выводить что-либо в stdout или в файл журнала. Это устраняет суть всего этого, а именно наличие файла журнала для использования в будущем, а также некоторые журналы stdout, чтобы я мог легко видеть прогресс сборки.
Варианты tee, похоже, ограничены --append, --ignore-interrupts, --help и --version. Итак, есть ли другой способ сделать то, что я пытаюсь сделать?





Вы можете вывести в файл и закрыть файл.
devenv mysolution.sln / build myproject "Release | Win32"> build.log &
хвост -f build.log
Напишите свой! (Дело в том, что настройка автозапуска ($|) включена, поэтому каждая видимая строка сразу же очищается. Возможно, это то, чего не хватало настоящей команде 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! :-П
tee seems to insist on waiting for the end of file before outputting anything to either stdout or the log file.
Этого точно не должно происходить - футболка станет практически бесполезной. Вот простой тест, который я написал, который проверяет это, и он определенно не ждет eof.
$ cat test
#!/bin/sh
echo "hello"
sleep 5
echo "goodbye"
$ ./test | tee test.log
hello
<pause>
goodbye
@jon: Да, похоже, моя проблема заключалась в том, что devenv.exe каким-то образом заглушал работу, когда строил большое решение. Я попытался использовать собственную замену тройника, и у меня возникла та же проблема.