質問

コマンドの出力をログに記録したいのですが、 stdout ログファイルにも記録されます。Cygwin がインストールされており、使用しようとしています tee これを達成するためのコマンド。

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

問題はそれです tee どちらかに何かを出力する前に、ファイルの終わりを待つことを主張しているようです stdout またはログファイル。これでは、今後の参照のためにログ ファイルを作成するという重要な点が失われますが、いくつかの点も失われます。 stdout ログを記録するので、ビルドの進行状況を簡単に確認できます。

teeのオプションは以下に制限されているようです --append, --ignore-interrupts, --help, 、 そして --version. 。それで、私がやろうとしていることを達成するための別の方法はありますか?

役に立ちましたか?

解決

Teeは、STDOUTまたはログファイルのいずれかに何かを出力する前に、ファイルの終了を待つことを主張しているようです。

これは絶対にあってはなりません。T シャツがほとんど役に立たなくなります。これをテストするために私が書いた簡単なテストを次に示します。これは間違いなく 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 &

tail -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!:-P

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top