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

nac*_*cab 8 bash shell

当我使用时,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
Run Code Online (Sandbox Code Playgroud)

Paŭ*_*ann 13

pstree似乎认为你不想要包装输出,因此它询问终端的宽度和输出同样多.topps表现相似.

你可以通过管道输出来避免这种情况cat:

pstree | cat
Run Code Online (Sandbox Code Playgroud)

编辑:啊,我看到你不想避免它,但添加切碎.

一种简单的方法是通过less -S(或者less --chop-long-lines更详细地)管理命令的输出.(您可能希望将其与其他一些选项结合使用,请参阅手册页,具体取决于您的偏好).

pstree | grep MDSImporte | less -SEX
Run Code Online (Sandbox Code Playgroud)

将显示您在终端尺寸处切断的线条.

  • 那......嗯..嗯.`R`也将保留着色(例如来自`git --color`),可能的选项首字母缩略词几乎是合适的:`less -SEXIER`(第二个`E`显然被忽略了) (2认同)
  • 还有一个用于`less -SEX` ...哦等等 (2认同)

Rob*_*vis 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
Run Code Online (Sandbox Code Playgroud)

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

还...

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

[ -t 1 ] && WIDTH=`stty size | cut -d ' ' -f 2`
pstree | grep MDSImporte | cut -c 1-${WIDTH}
Run Code Online (Sandbox Code Playgroud)

WIDTH当且仅当标准输出是终端时才会设置。如果是,它将限制输出为WIDTH字符(cut -c 1-80例如通过调用)。如果不是,它不会限制输出(因为cut -c 1-什么也不做)。

  • 要获取终端宽度,您可以使用变量 $COLUMNS (3认同)