端末全体を占めるbashスクリプトから古いセッションを復元する方法は?
いくつかのプログラムは次のように動作することを知っています。
- 森林
- ウィム
- 男性
- ナノメートル
一般的なパターンは、プログラムが端末全体を占有し、終了時にすべて、つまり入力されたコマンドと印刷された出力を復元することです。
答え1
terminfoオプションを使用する必要がありますcup
。これはシェルのコマンドを使用して実行できますtput
。
例えば
tput smcup
clear
echo hello
echo there
read
tput rmcup
これにより、画面が消去され、2行が印刷され、RETURNが押されるのを待ってから画面を以前の位置に復元します。
terminfo
もちろん、これをサポートするには端末定義が必要です。すべての端末にこの機能があるわけではありません。
答え2
bashスクリプトでclear
orを使用すると、元の画面の記録が混乱します。tput clear
画面はそのままですが、見える画面だけです。すべての歴史が消えた。clear
それを置き換える必要があることを理解するのに長い時間がかかりましたtput cup 0 0
(私の場合は、カーソルを左上に置いて操作しました)。
tput smcup
tput cup 0 0 # position cursor top left, simulate clear
...script
tput rmcup