シェルスクリプトを実行した後のセッションの復元

シェルスクリプトを実行した後のセッションの復元

ターミナル全体を占有する bash スクリプトから、以前のセッションを復元するにはどうすればよいですか?

私が知っているいくつかのプログラムはこのように動作します:

  • 部隊
  • ヴィム
  • ナノ

一般的なパターンは次のとおりです。プログラムがターミナル全体を乗っ取り、終了時にすべてが復元されます (つまり、入力されたコマンドと印刷された出力)。

答え1

terminfocupオプションを使用する必要があります。これは、コマンドを使用してシェルから実行できますtput

例えば

tput smcup
clear
echo hello
echo there
read
tput rmcup

これにより、画面がクリアされ、2 行が印刷され、RETURN キーが押されるまで待機してから、画面が以前の状態に戻ります。

terminfoもちろん、これをサポートするには端末の定義が必要です。すべての端末にこの機能があるわけではありません。

答え2

clearbash スクリプトでまたはを使用tput clearすると、元の画面の履歴が台無しになります。画面は残っていますが、表示されている画面のみです。履歴はすべて失われます。clearを に置き換える必要があることを知るのに長い時間がかかりましたtput cup 0 0(私の場合は、カーソルを左上に配置することで機能します)。

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

関連情報