将交互式会话管道化为文件

时间:2013-09-15 11:56:36

标签: bash unix tee

我制作了一个玩具互动控制台程序,基本上是一个翻译:

$ 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 个答案:

答案 0 :(得分:8)

脚本 - 制作终端会话的打字稿:

script -c "myprogram" file.log

整个会话将记录到file.log

答案 1 :(得分:5)

更简单的形式可能是

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

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

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

答案 2 :(得分:5)

由于两个进程无法读取相同的输入,需要两个三通,一个读取终端输入并写入程序标准输入,另一个读取程序标准输出并写入终端输出和file.log:< / p>

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

答案 3 :(得分:2)

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

script my-interactive-session.log program