当我使用时,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似乎认为你不想要包装输出,因此它询问终端的宽度和输出同样多.top和ps表现相似.
你可以通过管道输出来避免这种情况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)
将显示您在终端尺寸处切断的线条.
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-什么也不做)。