由于少于530(于2017年12月发布),less --quit-if-one-screen
因此如果读取的屏幕少于一个,则不会切换到备用屏幕。因此,如果您的less版本足够新,那么您就不会有此问题。
在早期版本中,更少的时间决定启动备用屏幕时是否使用备用屏幕。您不能将选择推迟到终止时。
您可以减少呼叫,让其使用备用屏幕,如果较少自动终止,则将内容显示在主屏幕上。但是我不知道检测自动终止的方法。
另一方面,对于短输入调用cat并为较大输入调用cat并不难,甚至保留缓冲,这样您就不必等待整个输入开始看到较少的东西(缓冲区可能是稍大一点-在您至少拥有一屏数据之前,您将看不到任何东西-但不会更多)。
#!/bin/sh
n=3 # number of screen lines that should remain visible in addition to the content
lines=
newline='
'
case $LINES in
''|*[!0-9]*) exec less;;
esac
while [ $n -lt $LINES ] && IFS= read -r line; do
lines="$lines$newline$line"
done
if [ $n -eq $LINES ]; then
{ printf %s "$lines"; exec cat; } | exec less
else
printf %s "$lines"
fi
您可能希望在进入时在主屏幕上看到这些行,如果这些行会引起滚动,请切换到备用屏幕。
#!/bin/sh
n=3 # number of screen lines that should remain visible in addition to the content
beginning=
newline='
'
# If we can't determine the terminal height, execute less directly
[ -n "$LINES" ] || LINES=$(tput lines) 2>/dev/null
case $LINES in
''|*[!0-9]*) exec less "$@";;
esac
# Read and display enough lines to fill most of the terminal
while [ $n -lt $LINES ] && IFS= read -r line; do
beginning="$beginning$newline$line"
printf '%s\n' -- "$line"
n=$((n + 1))
done
# If the input is longer, run the pager
if [ $n -eq $LINES ]; then
{ printf %s "$beginning"; exec cat; } | exec less "$@"
fi