按Ctrl+ A、H、 让我记录screen
命令的输出。但是,输出文件太大。是否可以应用grep
类似的过滤器,以便我可以控制记录的内容?
例如,我可能希望仅记录包含短语 的行foo bar
。
答案1
有趣的问题。我只是浏览了一下,man screen
所以我不确定是否可以在不使用外部工具的情况下实现。但是,可以使用命名管道以及 tail 和 grep 的组合来执行此操作:
$ mkfifo /tmp/fifo/fifo
$ tail -f /tmp/fifo/fifo | grep --line-buffered bar >> /tmp/DONE
里面screen
做:
logfile /tmp/fifo/fifo
并开始记录。完成记录后,仅包含的行将bar
保存在/tmp/DONE
.正如其中所述man fifo
:
FIFO 特殊文件(命名管道)与管道类似,不同之处在于它是作为文件系统的一部分进行访问的。它可以被多个进程打开以进行读或写。当进程通过 FIFO 交换数据时,内核会在内部传递所有数据,而不将其写入文件系统。因此,FIFO 特殊文件在文件系统上没有内容;文件系统条目仅充当参考点,以便进程可以使用文件系统中的名称访问管道。
这意味着/tmp/fifo/fifo
不占用磁盘空间。这个解决方案对我有用,但我不知道它可能有什么负面影响或缺点。
编辑:
我刚刚注意到他们建议fifo
使用man script
:
-f, --flush 每次写入后刷新输出。这对于远程合作来说非常有用:一个人可以执行“mkfifo foo;”操作。 script -f foo',另一个可以使用 'cat foo' 实时监督正在执行的操作。
如果你不知道,脚本是一个还记录终端会话的实用程序。