Para mim, less
se comporta como você descreve - eu preciso usar less -X
para desativar esse comportamento.
Você pode tentar usar explicitamente o " buffer de tela alternativa " que muitos terminais implementam.
Isso é usado por editores como vim
/ nano
, de modo que ao sair, o terminal é restaurado como era antes.
Tente isto:
tput smcup
ls | less
tput rmcup
Se tput
estiver indisponível, tente usar echo $'\e[?1049h'
/ echo $'\e[?1049l'
, respectivamente.