530 개 미만 (2017 년 12 월에 릴리스 됨)이므로 less --quit-if-one-screen
화면이 1 개 미만이면 대체 화면으로 전환되지 않습니다. 따라서 최신 버전이 충분하지 않으면이 문제가 발생하지 않습니다.
이전 버전에서는 대체 화면이 시작될 때 사용할지 여부를 덜 결정했습니다. 선택을 종료 할 때 연기 할 수 없습니다.
덜 전화하면 대체 화면을 사용할 수 있으며 자동으로 덜 종료되면 기본 화면에 내용을 표시 할 수 있습니다. 그러나 자동 종료를 감지하는 방법을 모르겠습니다.
반면에 짧은 입력에 대해서는 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