Bashは最初の行を除いて画面を消去します。

Bashは最初の行を除いて画面を消去します。

私のスクリプトはいくつかのテキストをエコーし​​、さらに処理します。 tputを使って画面を消去し、画面の最初の行を維持したいと思います。

例えば。

echo Started
seq 1000
tput cup 1 0 && tput ed

このように、Startedは画面に残り、他のすべては消去されますが、出力が小さい場合(例:seq 10)でのみ機能し、より長いスクロール出力では機能しません。

答え1

一部の端末ではスクロール領域を定義できます。

tput csr 1 "$(( ${LINES:-$(tput lines)} - 1 ))"
tput clear
echo Started
seq 1000

「開始」行が画面からスクロールしないように、2番目の行から最後の行までスクロール領域を設定します。それから:

tput cup 1 0 && tput ed

最後の行から2番目の行をもう一度消去します。

詳細については、terminfo(5) を参照してください。

バージョン608以降、非スクロールヘッダー行を指定するオプションlessもあります。--header=lines[,cols]

{
  echo Started; seq 1000
} | less --header=1

復帰後も画面に残るタイトルを-X含む出力オプションを追加できます。エスケープシーケンスのグラフィック再生を許可し、入力が画面に合う場合はページを付けないオプションもless参照してください。-Rless-F

関連情報