将交互式会话配对到文件

我做了一个基本上是翻译的玩具交互式控制台程序:

$ myprogram > this is user input this is program output 

我想将完整的会话(包括用户input和程序输出)传送到日志文件中。 我可以这样做:

 $ 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 

所以上面的会话将像往常一样显示在terminal上,但是也会被复制到日志文件中。

有一个更好的方法吗? 我不喜欢我如何写日志文件两次,也不知道如何在运行此命令之前记得擦除它。

更简单的形式可以

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

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

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

脚本 – 使终端会话的打字稿:

 script -c "myprogram" file.log 

整个会话将被记录到file.log

由于两个进程不能读取相同的输入,所以需要两个tees,一个读取终端输入并写入程序标准输入,另一个读取程序标准输出写入终端输出和file.log:

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

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

 script my-interactive-session.log program