プログラムless、more、またはviは、画面をクリアせずに端末画面にスクロールセクションをどのように追加し、その後どのように消えますか?
スクリプトから実行している場合、またはスクリプトを終了する方法で、特定の時間実行する方法はありますか?
まず、これは bash や使用しているシェルとは関係ありません。less
コマンド自体が画面の更新を処理します。任意のシェルまたはその他のプログラムから実行できます。
ターミナル エミュレータはエスケープ シーケンスをサポートしています。印刷可能な文字 (文字、数字など) を書き込むと、それらの文字が表示されます。エスケープ シーケンスを記述すると、カーソルの移動、現在の行のクリア、画面のクリアなど、他にもさまざまなことが起こります。
termcap
orterminfo
およびcurses
orソフトウェア パッケージはncurses
、これらのエスケープ シーケンスへのアクセスを提供します。less
、vim
、emacs
、通常ncurses
は画面の管理に使用します。
あなたの質問に関連する 2 つのシーケンスは、termcap と terminfo によってti
呼び出されます。このシーケンスにより、端末は現在の状態 (画面に表示されているすべてのものとカーソル位置) を保存し、次に空の状態で始まる 2 次表示バッファーに切り替わります。シーケンスは保存された状態を復元し、プライマリ ディスプレイ バッファに戻ります。を使用するプログラムは、デフォルトで、開始時にシーケンスを出力し、終了時に入力を出力します。これが、そのようなプログラムが終了時に端末ウィンドウを以前の状態に復元できる方法です。te
smcup
rmcup
smcup
rmcup
ncurses
smcup
rmcup
また、スクリプトから実行していた場合、またはスクリプトを終了する方法で、特定の時間実行する方法はありますか
それを行うための本当に良い方法はないと思います。less
インタラクティブなプログラムです。通常、ユーザーが入力したときq
などにのみ終了します。特定の時間実行することは、その目的に反するものであり、ユーザーとして、使用less
中に終了されるとイライラします。
コマンドを使用することもできますが、これは/メカニズムにtimeout
干渉し、表示が破損する可能性があります。あなたがやろうとしていることを達成するためのより良い方法がおそらくあります。smcup
rmcup