2012-09-07 3 views
1

Я знаю, чтоПрямой вывод на стандартный вывод и выходной файл одновременно?

./executable &>outputfile 

будет перенаправлять стандартный вывод и стандартные ошибки в файл. Это то, что я хочу, но мне также хотелось бы, чтобы результат продолжал печататься в терминале. Каков наилучший способ сделать это?

EDIT: Хорошо, вот моя точная команда: Я попытался

./damp2Plan 10 | tee log.txt 

и

./damp2Plan 10 2>&1 | tee log.txt 

где 10 это просто аргумент, передаваемый основной. Ни одна из них не работает правильно. В результате очень первый вывод printf в коде действительно подходит к терминалу и log.txt просто отлично, но никто из остальных не делает этого. Я на Ubuntu 12.04.

+0

Нет, 'CMD &> file' не перенаправляется в файл. В * некоторых * оболочках он делает это, но в других запускает 'cmd' в фоновом режиме без перенаправления и обрезания файла. Поведение '&>' не указано. –

+0

Неужели './Damp2Plan' все еще работает после вывода одной строки, или она завершена? Если он все еще работает, возможно, что 'tee' запустил последующий вывод. В этом случае вам нужно будет написать больше вывода или дождаться завершения './Damp2Plan'. – craig65535

+0

@ craig65535 Да, я верю ./damp2Plan все еще работает, так как он продолжает печатать выходные данные в своих других файлах, как и следовало ожидать. Что вы подразумеваете под «написать больше вывода»? Я бы предпочел не дождаться, пока он закончится, так как он занимает около 10 минут. На данный момент я думаю, что было бы проще просто добавить fprintf для каждого printf. – whatsherface

ответ

3

Использование tee:

./executable 2>&1 | tee outputfile

tee выходы в кусках и может быть некоторая задержка, прежде чем вы видите какой-либо вывод. Если вы хотите ближе к выходу в режиме реального времени, вы могли бы перенаправить в файл, как вы сейчас, и контролировать его с tail -f в другой оболочке:

./executable 2>&1 > outputfile

tail -f outputfile

+0

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

+0

Не знаете, как автоматизировать это. Вы можете запустить свою программу на сеансе 'screen', и после завершения программы выгрузите буфер прокрутки в файл с помощью' Ctrl-A: hardcopy -h outputfile'. Тем не менее это все еще не совсем то, что вам нужно. – craig65535

+0

Ya, так что я думаю, что происходит, когда я использую тройник, все просто сидит в буфере? и ничего не появляется в терминале (кроме первого оператора, который получает пользовательский ввод) или выходного файла.Использование tail -f будет полностью работать, если в файле есть что посмотреть. Я установил экран и возился с ним, хотя. Я уверен, что в конце концов я что-то получу. Спасибо за помощь! – whatsherface

Смежные вопросы