Filter screenlog com comando screen

1

Pressionando Ctrl + A , H , permite-me registar a saída do comando screen . No entanto, o arquivo de saída é muito grande. É possível aplicar um filtro grep -like para que eu possa controlar o que é registrado?

Por exemplo, talvez eu queira registrar apenas as linhas que contenham a frase foo bar .

    
por curryage 02.07.2015 / 14:10

1 resposta

0

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.

    
por 02.07.2015 / 19:34