Util para aparar a saída na largura do terminal?

12

Quando eu faço

ps aux

A saída é bem cortada na largura do meu terminal, para que descrições longas do processo não ocupem mais de uma linha. No entanto, se eu colocar isso em outra coisa, as longas filas retornam.

Sei que esse é um comportamento adequado, pois o ps não está mais sendo gerado para um tty e toda a saída pode ser crucial para o processamento. O que eu quero é outro utilitário que cortará a saída de volta quando eu 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 garantirá que as longas filas sejam cortadas e não transbordem.

Existe algo assim?

itsadok
fonte

Respostas:

15

Você pode usar o cutcomando para dividir a saída. Por exemplo:

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

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

Se você estiver usando a linha de comando do bash, poderá fazer o seguinte:

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

Se a saída tiver guias, a largura poderá não ser calculada corretamente. expandpode transformar guias em espaços:

ps aux | grep -v 'www-data' | expand | cut -c-$COLUMNS
retrátil
fonte
1
... e se você deseja que sua saída seja colorida por grep (como eu), cutprimeiro e grepdepois.
DerMike
E adicionei um alias no meu arquivo ~ / .bash_aliases: alias cutt = 'cut -c - $ COLUMNS'. Agora eu posso apenas tubo para cutt ...
Samuel Lampa
1
Isso se comporta mal se houver guias na saída. Alguma sugestão? Uma opção é converter as guias em espaços primeiro, mas seria bom evitar isso, caso desejemos preservar as guias para mais tarde no pipeline.
Aaron McDaid
2
Encontrei expande editei a resposta para incluí-la. Corrige a guia #
Aaron McDaid 13/11
3

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

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

onde ${COLUMNS}fornece a largura atual do terminal. O resizecomando pode ser usado para gerar novamente a largura atual:

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

Você pode, se quiser automatizar isso, agrupar isso em um script nowrap:

#!/bin/bash

eval "export $(resize | grep 'COLUMNS=')"
cut -c1-${COLUMNS} -

fonte
2

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

tput cols

para obter a largura:

COLUNAS = $ (colunas de tput)


fonte