Pergunta interessante. Eu apenas folheei o man screen
, então não tenho certeza se é possível conseguir sem usar ferramentas externas. No entanto, pode-se usar um pipe nomeado e uma combinação de cauda e grep para fazer isso:
$ mkfifo /tmp/fifo/fifo
$ tail -f /tmp/fifo/fifo | grep --line-buffered bar >> /tmp/DONE
Por dentro de screen
do:
logfile /tmp/fifo/fifo
e inicie o registro. Depois de concluir o registro, somente as linhas que contiverem bar
serão salvas em /tmp/DONE
. Como afirma em man fifo
:
A FIFO special file (a named pipe) is similar to a pipe, except that it is accessed as part of the file system. It can be opened by multiple processes for reading or writ- ing. When processes are exchanging data via the FIFO, the kernel passes all data internally without writing it to the file system. Thus, the FIFO special file has no con- tents on the file system; the file system entry merely serves as a reference point so that processes can access the pipe using a name in the file system.
Isso significa que /tmp/fifo/fifo
não ocupa espaço no disco. Essa solução funcionou para mim, mas não sei quais efeitos colaterais negativos ou deficiências ela pode ter.
EDITAR:
Acabei de notar que eles recomendam o uso de fifo
em man script
:
-f, --flush Flush output after each write. This is nice for telecooperation: one person does 'mkfifo foo; script -f foo', and another can supervise real-time what is being done using 'cat foo'.
Caso você não saiba, o script é um utilitário que também registra sessão de terminal.