Sua saída mostra que top
está imprimindo algumas seqüências de escape que o terminal não reconhece. Os bits em que você vê um espaço em branco seguido por [
seguido por mais caracteres ilegíveis são sequências de escape que funcionam na maioria dos terminais; o primeiro caractere dessas seqüências é o caractere de escape, que seu terminal imprime como um espaço em branco. Por exemplo, ␛[7m
no início da linha do título inicia o vídeo inverso, ␛[0m
pára o vídeo inverso, etc.
Não sei exatamente o que está acontecendo com a coluna STAT e VSZ, mas parece que o top também imprimiu algumas sequências de mudança de cores (é de lá que o m
está vindo), e elas foram parcialmente sobrescrito (provavelmente o topo está imprimindo um caractere ␈
que faz o cursor ir para a esquerda para que o próximo caractere substitua o que estava lá).
Com muitos programas, configurar a variável de ambiente TERM
corretamente é suficiente: ela deve indicar um tipo de terminal que não suporta nenhuma sequência de escape. Certifique-se de que você não tenha um script que codifique um valor TERM
em algum lugar. Tente TERM=dumb
. Se você estiver usando o BusyBox, eu acho que seus códigos de top
escapam de seqüências que funcionam na maioria dos terminais, então você está sem sorte. Você poderia executá-lo através de um filtro que remove seqüências de escape. Não testado, mas deve funcionar com o BusyBox.
#!/bin/sh
script=$(printf 's/3\[[0-9;]*[A-Za-z]//g')
sed -e "$script" "$@"
(De este script Perl mais completo)