Paginação padrão usando 'mais' e canalização para syslog

Paginação padrão usando 'mais' e canalização para syslog

Implementei um script wrapper que faz com que todos os comandos executados por meio desse script wrapper registrem (via rsyslog) coisas como o tempo de execução, o usuário que executou o comando e o código de saída.

Estou tentando implementar a paginação e encontrei um problema com o comando 'mais'. A raiz do meu problema é que 'mais' parece encerrar quando é canalizado para outro programa, por exemplo

echo -e "this\nis\na\ntest" | more -3 | cat

Isso imprimirá 4 linhas, mas se cortarmos o '| cat' no final, ele fará uma pausa após imprimir 3 linhas, conforme esperado.

É certo que usar 'menos' em vez de 'mais' funciona, embora não tenha o efeito desejado, pois abre uma "janela" separada e não permite rolar para trás depois de concluído (não preciso da habilidade para rolar para trás da maneira que 'menos' permite).

Minha solução atual é usar os comandos 'head' e 'tail' para obter o efeito desejado, mas também existem outros desafios a serem enfrentados.

Alguém sabe o segredo para fazer 'mais' funcionar da maneira que imaginei? Sugestões para outra ferramenta de paginação que seja mais simples (suporta ações Enter, espaço e 'q') também são bem-vindas.

Obrigado!

Responder1

Parece que usar teepara redirecionar para um arquivo e paginar stdout seria mais apropriado do que paginar no meio de um pipeline:

printf "%s\n" this is a test | tee /tmp/some.file | more -3

informação relacionada