10

我制作了一个玩具交互式控制台程序,它基本上是一个解释器:

$ 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

因此,上述会话将照常显示在终端上,但也会复制到日志文件中。

有一个更好的方法吗?我不喜欢必须两次写入日志文件的方式,也不喜欢在运行此命令之前必须记住擦除它的方式。

4

4 回答 4

11

script — 制作终端会话的打字稿:

script -c "myprogram" file.log

整个会话将记录到 file.log

于 2013-11-25T08:26:14.213 回答
6

由于两个进程无法读取相同的输入,因此需要两个 tee,一个读取终端输入并写入程序标准输入和 file.log,另一个读取程序标准输出并写入终端输出和 file.log:

tee -a file.log | program | tee -a file.log
于 2013-09-15T13:05:37.623 回答
5

更简单的形式可能是

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

如果您想防止输入再次显示在屏幕上:

tee -a file.log | myprogram | tee -a file.log
于 2013-09-15T13:03:12.160 回答
2

一个简单的方法是使用脚本命令。它只存储您的整个终端会话。运行它:

script my-interactive-session.log program
于 2013-11-10T23:29:32.273 回答