如何将输出限制为终端宽度

问题描述 投票:0回答:4

当我使用

pstree
时,我看到行仅达到终端宽度(即没有自动换行),但是当我
grep
输出时,它确实会换行。它使用什么函数来改变这种行为?

bash$ pstree
\--= 76211 _spotlight /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker MDSImporte
bash$ pstree | grep MDSImporte
\--= 76211 _spotlight /System/Library/Frameworks/CoreServices.framework/Frameworks/Metadata.framework/Versions/A/Support/mdworker MDSImporterWorker com.apple.Spotlight.ImporterWorker.89
bash shell
4个回答
20
投票

pstree
似乎认为您不想要包装输出,因此它会向终端询问其宽度并输出同样多的信息。
top
ps
表现相似。

您可以通过管道输出来避免这种情况

cat
:

pstree | cat

编辑:啊,我看到你不想避免它,而是添加切碎。

一种简单的方法是通过

less -S
(或更详细地说是
less --chop-long-lines
)管道输出命令的输出。 (您可能希望将其与其他一些选项结合起来,请参阅手册页,具体取决于您的喜好)。

pstree | grep MDSImporte | less -SEX

将显示您以终端尺寸切断的线条。


5
投票

pstree
必须检查它是否正在写入终端,如果是,它会查询终端的列宽,然后相应地限制输出。你可以做类似的事情:

WIDTH=`stty size | cut -d ' ' -f 2`            # Get terminal's character width
pstree | grep MDSImporte | cut -c 1-${WIDTH}   # Chop output after WIDTH chars

其他实用程序(例如

less
)可以为您执行此操作,但可能会产生其他副作用(例如提示您在每页输出后按空格键)。

还有...

如果您询问如何确定脚本是否正在写入终端、文件或管道,您可以这样做:

[ -t 1 ] && WIDTH=`stty size | cut -d ' ' -f 2`
pstree | grep MDSImporte | cut -c 1-${WIDTH}

当且仅当标准输出是终端时,才会设置

WIDTH
。如果是,它将限制输出为
WIDTH
个字符(例如通过调用
cut -c 1-80
)。如果不是,它不会限制输出(因为
cut -c 1-
不执行任何操作)。


1
投票

它检查输出是否是终端。

其他程序也做类似的事情:

grep --color=auto
ls --color=auto

0
投票

只需将任意终端命令的输出通过管道传输到 cut 中,当您调整终端大小时,它会自动更新 COLUMNS 的值


pstree | cut -c1-$COLUMNS

systemd-+-ModemManager---3*[{ModemManager}]
        |-NetworkManager---3*[{NetworkManager}]
        |-accounts-daemon---3*[{accounts-daemon}]
        |-avahi-daemon---avahi-daemon
        |-canonical-livep---12*[{canonical-livep}]
        |-colord---3*[{colord}]
        |-containerd---18*[{containerd}]
        |-containerd-shim-+-supervisord-+-/usr/sbin/a
        |                 |             |-check-for-c
        |                 |             |-cron
        |                 |             |-dovecot-+-a
        |                 |             |         |-c
        |                 |             |         `-l
        |                 |             |-fail2ban-se
        |                 |             |-opendkim---
        |                 |             |-opendmarc--
        |                 |             |-postfix-wra

这适用于 ubuntu 笔记本电脑...不知道 osx

© www.soinside.com 2019 - 2024. All rights reserved.