Использование команды tee быстро даже для одной команды

Я новичок в использовании tee команда.

Я пытаюсь запустить одну из моих программ, выполнение которой занимает много времени, но она выводит информацию по мере ее продвижения. Я использую "тройник", чтобы сохранить вывод в файл, а также чтобы увидеть вывод в оболочке (bash).

Но проблема в том, tee не пересылает вывод в оболочку до конца моей команды. Есть ли способ сделать это?

Я использую Debian и bash,

3 ответа

Решение

Это на самом деле зависит от объема вывода и реализации любой команды, которую вы запускаете. Ни одна программа не обязана печатать материал прямо на stdout или же stderr и промойте это все время. Таким образом, даже при том, что большинство реализаций среды выполнения C сбрасываются после того, как определенный объем данных был записан с использованием одной из подпрограмм времени выполнения, таких как printfэто может быть не так в зависимости от реализации.

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

Проблема, с которой вы столкнулись, скорее всего связана с буферизацией. Вы можете взглянуть на команду stdbuf, которая выполняет следующие действия:

stdbuf - запустить COMMAND с измененными операциями буферизации для своих стандартных потоков.

Если бы вы опубликовали свое использование, я мог бы дать лучший ответ, но так оно и есть

(for i in `seq 10`; do echo $i; sleep 1s; done) | tee ./tmp

Это правильное использование команды tee и, кажется, работает. Замените часть перед трубой с вашей командой, и вы должны быть в порядке.

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