A pergunta parece conter todas as informações relevantes. Um script de wrapper simples seria parecido com isto:
#!/bin/bash
if [ -t 0 && $# = 1 ]
then
want=$(wc -l "$1" |sed -e 's/[[:space:]].*//')
have=$(stty -a |grep -E " rows [[:digit:]]" | sed -e 's/^.* rows //' -e 's/;.*//')
if [ $want -le $have ]
then
less -FX "$1"
else
less "$1"
fi
else
less "$1"
fi
que verifica se a entrada padrão é um terminal e, em caso afirmativo, conta o número de linhas no arquivo, comparando-o com o número na tela. Opções de manuseio complicariam as coisas, é claro.
Alguém pode postar um script mais conciso; isso funciona em um teste rápido aqui.