Sobrescrever a saída do terminal de um comando bash que possui saída em várias linhas?


0

Eu tenho um comando bash que quero executar uma vez por segundo e manter a saída exibida na tela. Eu poderia fazer algo como o seguinte:

while "true"; do foo; sleep 1; done

mas isso cria rolagem perturbadora. Como alternativa, eu poderia fazer o seguinte:

while "true"; do clear; foo; sleep 1; done

mas isso faz com que a saída pisque conforme é apagada e gravada. Existe uma boa maneira de fazer com que a saída do comando substitua o que está no terminal?

Respostas:


5

Dê uma olhada no comando watch; algo como

assistir-1 foo


-bash: watch: command not found.; man watch: No manual entry for watch.
Daniel Beck

Parece que deve ser o que eu quero, mas a saída está errada. A primeira chamada ao comando pelo relógio produz uma boa saída e, a cada chamada adicional, a saída fica cada vez mais confusa. O alinhamento piora progressivamente até que eu não consigo mais ler. EDIT : estranhamente, se eu redimensionar a janela do terminal, a saída é boa novamente, mas ainda continua a degradar a cada chamada que passa.
precisa saber é o seguinte

Parece que há alguma saída stderror que pode criar esse problema (estou executando watch sudo jmap -heap <pid>, que começa com quatro linhas de saída stderror). Se eu anexar 2> /dev/nullao comando fora do relógio, isso retira a saída. No entanto, anexar 2> /dev/nullfaz com que a saída fique confusa e faltando linhas.
jonderry

@ jonderry: Eu realmente não posso ajudar, porque eu nunca tive o problema, mas você pode tentar canalizar a saída do seu comando para o gato, em seguida, assistir seria lidar com coisas "de gato" que podem ser mais fáceis de lidar, ou seja, assistir foo | cat
Neal

@ Daniel: Qual sistema operacional você está usando? Acabei de experimentar os três sistemas operacionais Linux (Opensuse, Fedora e SystemRescueCD) aqui e todos eles o instalam - e, tanto quanto me lembro, ainda não o instalei.
Neal
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.