Utilisez pour couper la sortie à la largeur du terminal?

12

Quand je fais

ps aux

La sortie est bien ajustée à la largeur de mon terminal, de sorte que les longues descriptions de processus ne prennent pas plus d'une ligne. Cependant, si je le redirige vers autre chose, les longues lignes reviennent.

Je me rends compte que c'est un comportement correct, car ps ne produit plus de sortie vers un tty et la sortie entière peut être cruciale pour le traitement. Ce que je veux, c'est un autre util qui recadrera la sortie quand j'aurai fini.

Je veux pouvoir faire quelque chose comme ça:

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

nowrapest l'outil imaginaire que je recherche. Il s'assurera que les longues lignes sont coupées et ne débordent pas.

Y a-t-il quelque chose comme ça?

itsadok
la source

Réponses:

15

Vous pouvez utiliser la cutcommande pour découper la sortie. Par exemple:

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

Cela ne gardera que les 80 premiers caractères de chaque ligne. Vous pouvez bien sûr régler cela à n'importe quelle largeur que vous souhaitez.

Si vous utilisez la ligne de commande bash, vous pouvez le faire:

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

Si la sortie comporte des onglets, la largeur peut ne pas être calculée correctement. expandpeut transformer des tabulations en espaces:

ps aux | grep -v 'www-data' | expand | cut -c-$COLUMNS
retracile
la source
1
... et si vous voulez que votre sortie soit colorée par grep (comme moi), vous devez d' cutabord et grepensuite.
DerMike
Et j'ai ajouté un alias dans mon fichier ~ / .bash_aliases: alias cutt = 'cut -c - $ COLUMNS'. Maintenant, je peux simplement tailler pour couper ...
Samuel Lampa
1
Cela se comporte mal s'il y a des onglets dans la sortie. Aucune suggestion? Une option consiste à convertir d'abord les tabulations en espaces, mais ce serait bien d'éviter cela, au cas où nous souhaiterions conserver les tabulations pour plus tard dans le pipeline.
Aaron McDaid
2
J'ai trouvé expandet modifié la réponse pour l'inclure. Il corrige pour tab
Aaron McDaid
3

Vous pouvez recadrer la sortie à l'aide de cut. par exemple

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

${COLUMNS}fournit la largeur actuelle du terminal. La resizecommande peut être utilisée pour recréer la largeur actuelle:

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

Vous pourriez, si vous vouliez automatiser cela, envelopper cela dans un script nowrap:

#!/bin/bash

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

la source
2

Et en plus de ce que Nagul a dit, vous pouvez utiliser dans bash:

cols de tput

pour obtenir la largeur:

COLUMNS = $ (tput cols)


la source