Sejak kurang 530 (dirilis pada Desember 2017), less --quit-if-one-screen
tidak beralih ke layar alternatif jika terbaca kurang dari satu layar penuh. Jadi Anda tidak akan memiliki masalah ini jika versi Anda kurang cukup baru.
Pada versi sebelumnya, lebih sedikit yang harus memutuskan apakah akan menggunakan layar alternatif ketika dimulai. Anda tidak dapat menunda pilihan itu saat berakhir.
Anda bisa menelepon lebih sedikit, membiarkannya menggunakan layar alternatif, dan memasukkan konten ke layar utama jika kurang otomatis dihentikan. Namun saya tidak tahu cara mendeteksi penghentian otomatis.
Di sisi lain, tidak sulit untuk memanggil cat untuk input pendek dan lebih sedikit untuk input yang lebih besar, bahkan menjaga buffering sehingga Anda tidak perlu menunggu seluruh input untuk mulai melihat barang-barang lebih sedikit (buffer mungkin sedikit lebih besar - Anda tidak akan melihat apa pun sampai Anda memiliki setidaknya satu layar penuh data - tetapi tidak lebih).
#!/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
Anda mungkin lebih suka melihat garis-garis pada layar utama saat mereka masuk, dan beralih ke layar alternatif jika garis-garis itu akan menyebabkan pengguliran.
#!/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