Existe uma versão de paginação de 'watch'?

23

Em um shell UNIX, como posso obter um efeito semelhante ao comando watch , mas com paginação para que eu possa rolar pela saída se ela ocupar mais de uma tela?

Em outras palavras, quero que um programa que corresponda a watch , o que é less a cat .

Como exemplo, digamos que eu quisesse ver a saída de qstat , eu poderia usar

watch qstat

para assistir a saída do qstat, mas isso só pode mostrar a primeira tela.

Com uma versão de paginação de watch , eu seria capaz de me movimentar na saída, pois ela ainda é continuamente atualizada por watch . Existe alguma maneira de fazer isso no momento com utilitários existentes?

    
por David Dean 06.08.2009 / 06:33

10 respostas

18

Em vez de modificar o comando 'watch', use a tela!

Por exemplo, digamos que você precise ver 300 linhas de altura e 100 caracteres de largura e se mover por aí. Depois de iniciar a tela, force o tamanho assim:

C-a :height -w 300
C-a :width -w 100

Agora inicie seu comando de observação. Você pode então usar C-a <ESC> na página ao redor do display.

Infelizmente, a exibição não é atualizada no modo de cópia. Mas se você quiser ajustar a seção da janela que está visualizando, a maneira mais fácil pode ser reexecutar os comandos de altura / largura, pois, por padrão, seu terminal mostra a parte inferior direita da janela virtual.

    
por 12.08.2009 / 17:31
5

Você pode tentar isso:

enquanto vmstat; durma 1; feito | menos

substitua o vmstat pelo qstat e ajuste o sono às suas necessidades

    
por 07.08.2009 / 11:51
4

Multitail: link

Exemplo:

 vmstat 1 |multitail -j

Role para trás pressionando "b" e a página / seta para cima / para baixo.

    
por 14.08.2009 / 04:45
2

OK, eu tive um pouco de ir em uma função watchless . É um pouco difícil, e ainda não parece funcionar completamente, mas aqui vai:

#!/bin/bash -u
out=$(mktemp)
(while [ 1 ]; do
    "$@" > $out;
    sleep 2;
done) &
less $out
kill $!

Você precisa usar manualmente a tecla R em menos para atualizar a exibição.

Parece funcionar para watchless date , mas não para watchless qstat ou watchless pstree , ambos em branco. Alguma idéia?

    
por 06.08.2009 / 07:22
0

Não vejo como isso pode ser implementado, já que o conteúdo da linha é alterado, e watch redefiniria a primeira linha a cada dois segundos, mesmo que você pudesse rolar para baixo.

Algumas soluções alternativas são:

watch 'qstat | tail -n40' para mostrar a saída do qstat começando da 40ª linha da parte inferior

watch 'qstat | grep jsmith' para grep a saída, para que as linhas de seu interesse estejam sempre na primeira tela.

Note que você precisa colocar os comandos em torno do pipe entre aspas simples - caso contrário, você estará colocando a saída de watch , não a saída de qstat .

    
por 11.08.2009 / 20:06
0

Para continuar a resposta do enkrs,

assista 'qstat | cabeça -300 | cauda -15 '

vai te dar páginas arbitrárias na saída do qstat.

    
por 11.08.2009 / 20:28
0

Aqui está um script bastante cru que parece funcionar para vários comandos que eu joguei nele

#!/bin/bash
# ---- mywatch.sh ----

if [ $# -lt 1 && $# -gt 2 ]; then
    echo "Usage: $0 <command> <delay>" 
    exit 1
fi

CMD=$1
if [ $# -eq 2 ]; then
  DELAY=$2
else
  DELAY=2 # default
fi

while : ; do
  ( (echo -e "Every ${DELAY}s: $CMD\n"; $CMD) | less )&
  PID=$!
  sleep $DELAY
  kill -9 $PID &> /dev/null
  clear
done

Usado como tal:

alias mywatch="~/bin/mywatch.sh"

mywatch vmstat
mywatch "ps aux" # commands in options need to be quoted
mywaych pstree 10 # change delays

Sendo bastante pedante, a transição entre atualizações não é tão suave quanto eu gostaria que fosse. Naturalmente, sendo um script simples, não suporta o destaque do diff (watch -d). Além disso, a análise de argumentos de entrada pode ser feita melhor.

    
por 12.08.2009 / 18:04
0

Que tal apenas: tail -f

    
por 17.08.2009 / 15:36
0

Eu implementei um script python simples para satisfazer esse pedido, chamado "watchall"

obtenha por: pip install watchall

substitua o relógio por um relógio e divirta-se com a tela rolável. agora ele suporta apenas sinalizadores -n e -d.

    
por 14.06.2017 / 09:04
-1

você pode tentar:

watch command > file

em seguida, no seu arquivo, você verá a saída de acréscimo (não tenho uma caixa de linux agora para testar isso)

    
por 06.08.2009 / 06:40