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

时间:2011-07-25 18:05:39

标签: 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

3 个答案:

答案 0 :(得分:12)

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

您可以通过cat输出输出来避免这种情况:

pstree | cat

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

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

pstree | grep MDSImporte | less -SEX

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

答案 1 :(得分:4)

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-什么都不做)。

答案 2 :(得分:1)

检查输出是否为终端。

其他程序做类似的事情:

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