Всегда ли команда tee ожидает EOF?

Я хочу записывать вывод команды в stdout, а также в файл журнала. У меня установлен Cygwin, и я пытаюсь использовать для этого команду tee.

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

Проблема в том, что tee, кажется, настаивает на ожидании конца файла, прежде чем выводить что-либо в stdout или в файл журнала. Это устраняет суть всего этого, а именно наличие файла журнала для использования в будущем, а также некоторые журналы stdout, чтобы я мог легко видеть прогресс сборки.

Варианты tee, похоже, ограничены --append, --ignore-interrupts, --help и --version. Итак, есть ли другой способ сделать то, что я пытаюсь сделать?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
3 134
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете вывести в файл и закрыть файл.

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! :-П

Ответ принят как подходящий

tee seems to insist on waiting for the end of file before outputting anything to either stdout or the log file.

Этого точно не должно происходить - футболка станет практически бесполезной. Вот простой тест, который я написал, который проверяет это, и он определенно не ждет eof.

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

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

@jon: Да, похоже, моя проблема заключалась в том, что devenv.exe каким-то образом заглушал работу, когда строил большое решение. Я попытался использовать собственную замену тройника, и у меня возникла та же проблема.

Owen 25.06.2009 05:46

Другие вопросы по теме