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

Dav*_*ave 9 unix bash tee

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

$ myprogram
> this is user input
this is program output
Run Code Online (Sandbox Code Playgroud)

我想将整个会话(用户输入和程序输出)传递到日志文件中.我可以这样做:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

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

小智 9

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

script -c "myprogram" file.log
Run Code Online (Sandbox Code Playgroud)

整个会话将记录到file.log


kon*_*box 6

更简单的形式可能是

tee >(myprogram) | tee -a file.log
Run Code Online (Sandbox Code Playgroud)

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

tee -a file.log | myprogram | tee -a file.log
Run Code Online (Sandbox Code Playgroud)


Nah*_*eul 5

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

tee -a file.log | program | tee -a file.log
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。我给了 konsolebox 答案,因为他比你快了大约 3 分钟,但这个解释让我对两次使用 T 恤感觉更好。 (2认同)