2008-09-20 58 views
3

我想記錄命令的輸出到stdout以及日誌文件。我已經安裝了Cygwin,並試圖使用tee命令來完成此操作。T恤命令是否總是等待EOF?

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

麻煩的是,tee似乎堅持輸出任何東西要麼stdout或日誌文件之前等待文件的末尾。這就消除了所有這一點,即有一個日誌文件供將來參考,但也有一些日誌記錄,所以我可以很容易地看到構建過程。

tee的選項出現在限於--append--ignore-interrupts--help,和--version。那麼是否有另一種方法可以達到我想要做的?

回答

1

發球似乎輸出任何東西 之前等待文件的 堅持到底要麼標準輸出或日誌文件。

這絕對不應該發生 - 它會使三通幾乎無用。以下是我寫的一個簡單的測試,它將測試結果顯示出來,並且絕對不會等待eof。

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

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

@喬恩:是啊,看來我的問題是實際上的devenv.exe窒息的事情在某種程度上,當它建立一個大的解決方案。我嘗試使用我自己的發球臺替換器,它也有同樣的問題。 – Owen 2009-06-25 01:46:32

4

您可以輸出到文件並尾部-f文件。

devenv的mysolution.sln/myproject的建設 「釋放|的Win32」> build.log &

尾-f build.log

+0

wintail也可以 – mana 2008-09-20 00:42:19

2

自己寫的! (這裏的關鍵是,自動沖洗($|)設置打開,所以看到的每一行被刷新,立竿見影。這也許是真正的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! :-P