Role para dentro da Tela ou Pause a saída

383

Uso a tela para minhas tarefas de linha de comando ao gerenciar os servidores em que trabalho. Normalmente, executo comandos pequenos (principalmente tarefas do sistema de arquivos), mas às vezes executo tarefas mais extensas (como o DBA).

O resultado dessas tarefas é importante para mim. Como uso o Ubuntu e o OS X (ambos Terminal Windows) para minhas tarefas, ainda preciso usar a tela, a rolagem não está disponível; portanto, qualquer saída longa (pense em uma tabela de 500 linhas de uma seleção) fica invisível para mim. A roda do mouse está fora de questão.

Quando digo "o pergaminho é invisível para mim, quero dizer o seguinte:

no topo da tela, no Mac OS X, enquanto rola a tela

Eu estava pensando em duas opções:

  1. Pause (pense em paginar ) a saída de um determinado comando. Quando a saída começa, deixa-me ler o que está acontecendo, pressiono "Enter" e a saída continua até que não haja mais nada para mostrar.

  2. Role para dentro da tela. Mas não sei se isso é possível.

Claro, não sei se essas opções são realmente possíveis . Se são, como alcançá-los? Outras alternativas serão bem recebidas.

AeroCross
fonte

Respostas:

526

A tela possui seu próprio buffer de rolagem, pois é um multiplexador de terminal e deve lidar com vários buffers.

Talvez haja uma maneira melhor, mas estou acostumado a rolar usando o "modo de cópia" (que você pode usar para copiar texto usando a própria tela, embora isso exija também o comando colar):

  • Pressione a combinação de prefixo da tela ( C-a/ control+ Apor padrão) e pressione Escape.

  • Mover para cima / baixo com as teclas de seta ( e ).

  • Quando terminar, pressione qou Escapepara voltar ao final do buffer de rolagem.

(Se em vez de qou Escapevocê pressionar Enterou Returne mover o cursor, você estará selecionando o texto a ser copiado e pressionado Enterou Returnuma segunda vez o copiará. Em seguida, você poderá colar com C-aseguido de ].)

Obviamente, você sempre pode usar moree less, dois pagers comumente usados, o que pode ser suficiente para alguns comandos.

njsg
fonte
5
Além disso, pressionar q sai do modo de cópia sem copiar nada (e é apenas um pressionamento de botão). Isso pode estar na explicação do vi, mas o link está quebrado agora.
Nathanael Farley
3
Também pressionar [Esc] também sai do modo de cópia.
Sopalajo de Arrierez
7
alguma maneira de page-up?
Sungguk Lim
10
O buffer de rolagem parece suportar comandos do tipo vi: Cb e Cf para rolar a página para cima / baixo.
Touko
3
No modo de cópia, meus botões PageUp e PageDown funcionam. Primeiro pressione apenas move uma linha, mas depois as páginas são normais.
Elias
171

Usar o screenbuffer conforme indicado pelo njsg é uma boa solução. Você também pode desativar o buffer de texto alternativo nas informações do xterm termcap dentro da tela. Quando desativado, você pode usar as barras de rolagem (e a roda do mouse) para rolar para cima e para baixo.

Adicione isso ao seu ~/.screenrc.

# Enable mouse scrolling and scroll bar history scrolling
termcapinfo xterm* ti@:te@

Você pode ler mais discussões aqui .

George M
fonte
1
conjunto scrollback limite digitando Ctrl + A,:, digite "scrollback 10000" ou qualquer valor numérico que você quer
Lobi
2
Usando isso, as teclas de atalho típicas dos terminais Linux (shift + pg para cima / para baixo em casa / fim) também funcionam, obrigado.
tokland
5
Esta dica só me faz reconsiderar usando a tela ...
Peixe Monitor de
5
+1 Solução mais elegante do que aceita.
Ryan Yoosefi
9
apenas fornece a saída screenfornecida desde que você a iniciou - ou seja, recolocar em outro lugar significa que você não pode rolar para cima e ver o que aconteceu antes. mas você ainda pode recuperar a saída anterior usando a solução na resposta aceita - e poderá usar a roda do mouse novamente.
Phil
28

Todas essas respostas abordaram como navegar em uma sessão de tela, mas há uma funcionalidade interna no comando screen para armazenar tudo em um arquivo através do -Largumento de acordo com o manual que diz:

-L informa à tela para ativar o log de saída automático para as janelas.

para que você possa fazer:

screen -L -S testscreen

e criará um arquivo com o número screenlog.#onde #está o número dessa tela, começando em 0.

Isso tem muitas vantagens e as mais importantes para mim são:

  1. Mantendo o registro do que fiz desde que posso salvar o arquivo de log na pasta do projeto para referência futura.
  2. Você pode monitorar de forma inativa e passiva o processo:
    • use tailfpara monitorar o progresso em tempo real sem ser anexado à tela.
    • use greppara verificar um determinado termo no log e gerar notificações (email, pop-up, voip, etc.). Isso pode ser aplicado em várias telas sem que você as observe ativamente.
Mehrad Mahmoudian
fonte
1
Eu não estava ciente da -Lbandeira da tela, isso é muito útil! +1
Kredns
1
só quero adicionar mais, screenlog.#é gerado na mesma pasta onde você executa o screencomando
Lê Quang Duy
3

Consegui obter paginação básica direcionando conteúdo para more, por exemplo:

ls -l | more

Ou, se você deseja saída colorida para casos de uso, como realce de sintaxe, pode usar

ls -l --color=always | more

Isso resulta em uma saída que eu posso facilmente percorrer uma tela por vez. Não tentei modificar o @ uther, ~/.screenrcmas isso parece preferível como uma solução duradoura quando um mouse está disponível.

Para testar isso, você pode acessar este emulador BusyBox e depois ...

cd ~/bin
ls -l --color=always | more

Use a barra de espaço para percorrer os resultados do ls -lcomando ou use a tecla Enter para percorrer os resultados linha por linha.

Michael Hogan
fonte