2008-09-20 4 views
3

나는 명령의 출력을 stdout뿐만 아니라 로그 파일에 기록하고 싶다. Cygwin을 설치했는데 이것을 수행하기 위해 tee 명령을 사용하려고합니다.tee 명령은 항상 EOF를 기다리고 있습니까?

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

문제는 teestdout 또는 로그 파일 중 하나에 아무것도 출력하기 전에 파일의 끝에 기다리고 주장하는 것처럼 보인다는 것이다. 이것은 나중에 참조 할 수 있도록 로그 파일을 가지고있는 모든 것을 요점을 없애고 또한 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

4

파일로 출력하고 파일을 꼬리 수 있습니다.

devenv를의 mysolution.sln/구축에 MyProject "출시 | Win32에서"> build.log &

꼬리

+0

wintail도 가능 – mana

2

자신의 쓰기 build.log -f! (여기서 포인트는의 autoflush ($|) 설정이 켜져 있으므로 본 모든 라인이 아마도 실제 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

관련 문제