Использование команды 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 и, кажется, работает. Замените часть перед трубой с вашей командой, и вы должны быть в порядке.