Como os comentaristas antes de mim mencionaram, não há alternativa para chamar resize após cada comando, se você não tiver esse comando e não quiser instalar um pacote no qual ele está ( xterm ), aqui são dois shell script POSIX que fazem o mesmo usando códigos de escape do terminal ANSI:
res() {
old=$(stty -g)
stty raw -echo min 0 time 5
printf '373[r3[999;999H3[6n38' > /dev/tty
IFS='[;R' read -r _ rows cols _ < /dev/tty
stty "$old"
# echo "cols:$cols"
# echo "rows:$rows"
stty cols "$cols" rows "$rows"
}
res2() {
old=$(stty -g)
stty raw -echo min 0 time 5
printf '3[18t' > /dev/tty
IFS=';t' read -r _ rows cols _ < /dev/tty
stty "$old"
# echo "cols:$cols"
# echo "rows:$rows"
stty cols "$cols" rows "$rows"
}
-
resé baseado na solução apresentada no link . Funciona da seguinte forma: -
<> Relatório do tamanho da área de texto em caracteres. ").res2é influenciado porresize.shdo xterm (consulte link ). Ele usa um códigoxtermespecífico para obter as informações que desejamos (implementadas em muitos emuladores de terminal), consulte: ">"
BTW, no meu arquivo .profile , você encontrará o seguinte:
%código%
de modo que o tamanho do terminal seja determinado em cada login pela linha serial (aquela que eu uso para gerenciamento), e. depois de reiniciar o dispositivo.
Veja também a idéia de rsaw nos comentários para ter a linha [ $(tty) = /dev/ttyS0 ] && res lá Em vez disso, o redimensionamento é executado após cada comando (observe que o AFAIK nem sempre é possível no [ $(tty) = /dev/ttyS0 ] && trap res2 DEBUG ).