문제
명령의 출력을 다음에 기록하고 싶습니다. stdout
로그 파일에도 저장됩니다.Cygwin을 설치했고 다음을 사용하려고 합니다. tee
이를 수행하기 위한 명령입니다.
devenv mysolution.sln /build myproject "Release|Win32" | tee build.log
문제는 그게 tee
둘 중 하나에 아무것도 출력하기 전에 파일의 끝을 기다려야 한다고 주장하는 것 같습니다. stdout
또는 로그 파일.이는 나중에 참조할 수 있도록 로그 파일을 저장하는 것의 요점을 없애지만 일부도 포함됩니다. stdout
로깅을 통해 빌드 진행 상황을 쉽게 확인할 수 있습니다.
tee
님의 옵션은 다음으로 제한되어 있는 것 같습니다. --append
, --ignore-interrupts
, --help
, 그리고 --version
.그렇다면 내가 하려는 작업을 수행할 수 있는 다른 방법이 있나요?
해결책
Tee는 stdout 또는 로그 파일에 무엇이든 출력하기 전에 파일 끝을 기다리는 것을 고집하는 것 같습니다.
이런 일은 확실히 일어나서는 안 됩니다. 티를 거의 쓸모 없게 만들 것입니다.다음은 이를 테스트하기 위해 제가 작성한 간단한 테스트입니다. 확실히 eof를 기다리지 않습니다.
$ cat test
#!/bin/sh
echo "hello"
sleep 5
echo "goodbye"
$ ./test | tee test.log
hello
<pause>
goodbye
다른 팁
파일로 출력하고 파일을 tail -f할 수 있습니다.
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
!:-피