Question: I'd like to log the output of a command to `stdout` as well as to a log file. I've got Cygwin installed and I'm trying to use the `tee` command to accomplish this.

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

```

Trouble is that `tee` seems to insist on waiting for the end of file before outputting anything to either `stdout` or the log file. This takes away the point of it all, which is to have a log file for future reference, but also some `stdout` logging so I can easily see the build progress.

`tee`'s options appear to be limited to `--append`, `--ignore-interrupts`, `--help`, and `--version`. So is there another method to get to what I'm trying to do?

Answer: 
> 
> tee seems to insist on waiting for the
>  end of file before outputting anything
>  to either stdout or the log file.
> 
> 
> 

This should definitely not be happening - it would render tee nearly useless. Here's a simple test that I wrote that puts this to the test, and it's definitely not waiting for eof. 

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

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

```
Write your own! (The point here is that the autoflush (`$|`) setting is turned on, so every line seen is flushed straight away. This may perhaps be what the real `tee` command lacked.)

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

```

You can call the script anything you want. I call it `perlmilktee`! :-P