Restaurando a sessão após executar um script de shell

Restaurando a sessão após executar um script de shell

A partir de um script bash que ocupa todo o terminal, como restauro a sessão anterior?

Alguns programas dos quais sei que funcionam desta forma:

  • guarda-florestal
  • vim
  • homem
  • nano

O padrão comum é: o programa usurpa todo o terminal e, ao sair, tudo é restaurado, ou seja, comandos inseridos e saída impressa.

Responder1

Você deve usar as cupopções terminfo. Isso pode ser feito a partir de um shell com o tputcomando.

por exemplo

tput smcup
clear
echo hello
echo there
read
tput rmcup

Isso limpará a tela, imprimirá duas linhas, aguardará você pressionar RETURN e então restaurará a tela para onde estava antes.

Isso requer a terminfodefinição do seu terminal para suportar isso, é claro. Nem todos os terminais têm essa capacidade.

Responder2

Usar clearor tput clearbagunça o histórico da tela original quando usado em um script bash. A tela ainda está lá, mas apenas a tela visível. Toda a história se foi. Levei muito tempo para descobrir que clearprecisava ser substituído por tput cup 0 0(funciona no meu caso posicionando o cursor no canto superior esquerdo).

tput smcup
tput cup 0 0  # position cursor top left, simulate clear
...script
tput rmcup

informação relacionada