سؤال

أرغب في تسجيل مخرجات الأمر إلى stdout وكذلك إلى ملف السجل.لقد قمت بتثبيت Cygwin وأحاول استخدام tee أمر لتحقيق هذا.

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

المشكلة هي أن tee يبدو أنه يصر على انتظار نهاية الملف قبل إخراج أي شيء لأي منهما stdout أو ملف السجل.وهذا يزيل المغزى من كل ذلك، وهو أن يكون لديك ملف سجل للرجوع إليه في المستقبل، ولكن أيضًا بعض الملفات stdout التسجيل حتى أتمكن من رؤية تقدم البناء بسهولة.

teeيبدو أن خيارات s تقتصر على --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

نصائح أخرى

يمكنك الإخراج إلى الملف والذيل -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!:-ص

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top