Util para cortar a saída para a largura do terminal?

10

Quando faço

ps aux

A saída fica bem ajustada à largura do meu terminal, de modo que descrições longas de processo não demoram mais do que uma linha. No entanto, se eu canalizar em qualquer outra coisa, as linhas longas retornam.

Eu percebo que esse é um comportamento adequado, já que o ps não está mais enviando para um tty e toda a saída pode ser crucial para o processamento. O que eu quero é outro util que irá cortar a saída quando terminar.

Eu quero ser capaz de fazer algo assim:

ps aux | grep -v 'www-data' | nowrap  

nowrap é a ferramenta imaginária que estou procurando. Isso fará com que linhas longas sejam cortadas e não transbordem.

Existe algo assim?

    
por itsadok 22.10.2009 / 14:37

3 respostas

14

Você pode usar o comando cut para fatiar a saída. Por exemplo:

ps aux | grep -v 'www-data' | cut -c-80

Isso manterá apenas os primeiros 80 caracteres de cada linha. Você pode, claro, definir isso para qualquer largura que você quiser.

Se estiver usando a linha de comando bash, você pode fazer isso:

ps aux | grep -v 'www-data' | cut -c-$COLUMNS

Se a saída tiver guias, a largura pode não ser calculada corretamente. expand pode transformar as guias em espaços:

ps aux | grep -v 'www-data' | expand | cut -c-$COLUMNS
    
por 22.10.2009 / 14:44
3

Você pode cortar a saída usando cut . por exemplo,

ps aux | grep -v 'www-data' | cut -c1-${COLUMNS}

em que ${COLUMNS} fornece a largura atual do terminal. O comando resize pode ser usado para gerar novamente a largura atual:

$ resize
COLUMNS=80;
LINES=24;
export COLUMNS LINES;

Você poderia, se quisesse automatizar isso, agrupar isso em um script nowrap :

#!/bin/bash

eval "export $(resize | grep 'COLUMNS=')"
cut -c1-${COLUMNS} -
    
por 22.10.2009 / 14:59
2

E além do que o nagul disse, você pode usar no bash:

tput cols

para obter a largura:

COLUMNS = $ (tput cols)

    
por 04.02.2010 / 17:03