コマンドラインから画面の半分を消去する

コマンドラインから画面の半分を消去する

端末を消去する方法はありますか?しかし、プロンプトを画面の上部に置かずに途中に置きますか?clearデフォルトでは、すべてのコマンドラインパラメータが無視されるようです。

これを行う方法があると思いましたが、tput見つかりませんでした。

答え1

tputたとえば、次を使用してカーソルを画面上の特定の行に移動できます。

tput cup 11 0

12行目に移動します(値は0から計算を開始します)。

同様にtput、この機能を使用すると、その位置から画面の終わりまで消去できますed。組み合わせ、

tput cup 11 0 && tput ed

たぶんそれはあなたが望むものかもしれません。

画面の中間表示に移動するには、最初の数字が返されます。

stty size

(ほとんどのシステムでは)画面の行数です。以下をコマンドに追加します。

tput cup $(stty size|awk '{print int($1/2);}') 0 && tput ed

このclear計画は次のように異なりますtput ed

  • カーソルを次に移動します。位置(左上)と
  • その時点から画面の終わりまでクリアします。

注:一部のプラットフォームではtput edずっと前に解決された問題が原因で動作しないことがあります。このような場合、curses/ncurses 構成をアップグレードすると問題が解決します。

答え2

引用する回答

# Get ceiling eg: 7/2 = 4
ceiling_divide() {
  ceiling_result=$((($1+$2-1)/$2))
}

clear_rows() {
  POS=$1
  # Insert Empty Rows to push & preserve the content of screen
  for i in {1..$((LINES-POS-1))}; echo
  # Move to POS, after clearing content from POS to end of screen
  tput cup $((POS-1)) 0
}

# Clear quarter
alias ptop='ceiling_divide $LINES 4; clear_rows $ceiling_result'
# Clear half
alias pmid='ceiling_divide $LINES 2; clear_rows $ceiling_result'
# Clear 3/4th
alias pdown='ceiling_divide $((3*LINES)) 4; clear_rows $ceiling_result'

答え3

行数が奇数の場合、tput cupページ全体が消去されます。
次のように書くと問題が解決します。

tput cup $(($(stty size|awk '{print $1}')/2)) 0 && tput ed

答え4

クリアに興味がある方一番下画面の半分だけを維持し、残りを維持すると、次のように動作します。

half=$(stty size | awk '{print int($1/2)-1;}'); for i in `seq ${half}`; do echo '' ; done && tput cup ${half} 0 && tput ed

編集:明確にするために別の答えを実行すると、seq $(stty size | cut -d' ' -f1)出力の前半が残り、このコマンドは後半(つまり最新の出力)が残ります。

関連情報