1

如果我想清除屏幕并在程序的输出超过屏幕上的行数时减少运行,我可以执行以下操作:

mypgm | tee mypgm.out
LEN=$(wc -l mypgm.out | cut -f1 -d' ')
[[ $LEN >= $LINES ]]; then
   clear
   less -R mypgm.out
fi

只要输出中的行没有环绕,它就可以正常工作,在视觉上占据屏幕上的一行以上。有没有一种简单的方法来确定输出在视觉上占据了多少行,或者我是否必须遍历输出文件,使用 $COLUMNS 计算长行需要显示的“行”数

4

2 回答 2

6

似乎您实际上正在寻找类似的东西:

mycmd | less -F

来自man less

-F或者--quit-if-one-screen

如果整个文件可以显示在第一个屏幕上,则导致 less 自动退出。

您可以通过以下方式使其成为默认行为:

export LESS='-F'

在你的.bashrc.

-F选项与它很好地结合在一起-X,它将在列出之前跳过屏幕的清除(也可以将其作为默认设置LESS='-FX')。

于 2017-07-20T17:27:39.153 回答
0

我找到了折叠,它解决了这个问题:

fold -w "$COLUMNS" mypgm.out | wc -l

(不需要'cut',因为 wc 是在管道上运行的)

于 2017-07-20T17:25:31.270 回答