2013-09-15 4 views
7

Я сделал игрушку интерактивную консольную программу, которая в основном переводчик:Конвейеризация интерактивный сеанс в файл

$ myprogram 
> this is user input 
this is program output 

Я хочу трубы полный сеанс, как пользовательский ввод и программа вывода, в лог-файл , Я могу это сделать так:

$ cat | tee >(myprogram | tee -a file.log) >> file.log 
> this is user input 
this is program output 
$ cat file.log 
> this is user input 
this is program output 

Так выше сессия будет отображаться на терминале, как обычно, но также будет дублироваться в лог-файл.

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

+0

команду Тройник предназначен для перенаправления вывода в файл. В основном он копирует ваш вывод в файл, если вы пишете $ output | tee file.log будет копировать выходные данные в файл.log –

ответ

5

Чем проще форма может быть

tee >(myprogram) | tee -a file.log 

Если вы хотите, чтобы предотвратить ввод снова показывается на экране:

tee -a file.log | myprogram | tee -a file.log 
+1

Спасибо, я не понял, что tee по умолчанию будет читать из stdin, делая вызов cat redundant. Жаль, что я должен написать файл.log дважды, но не конец света. – Dave

4

Как два процесса не могут читать один и тот же вход необходимы два тройники , который считывает ввод терминала и записывает в стандартный ввод стандарта и файл.log другой, который считывает стандартный программный вывод и записывает в вывод терминала и файл.log:

tee -a file.log | program | tee -a file.log 
+0

Спасибо. Я дал ответ на консольбокс, потому что он избил вас примерно на 3 минуты, но объяснение помогает мне чувствовать себя лучше с использованием тройника дважды. – Dave

2

Простым способом является использование команды . Он просто хранит всю сессию терминала. Запустите его с:

script my-interactive-session.log program 
6

сценария - сделать машинописный терминальной сессии:

script -c "myprogram" file.log 

Вся сессия будет записываться в file.log

+0

Это работает, но он захватывает все символы (включая escape-последовательности), что может затруднить чтение файла журнала – tehwallz

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