コマンドラインから画面の半分をクリアする


11

ターミナルをクリアする方法はありますか?プロンプトを画面上部に残す代わりに、中央に残しますか?clear基本的にすべてのコマンドラインパラメータを無視するように見えます。

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

回答:


12

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

tput cup 11 0

それを12行目に移動します(値はゼロからカウントされます)。

同じように、機能を使用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構成をアップグレードすると問題が解決します。


UNIXでは、これはテキストをクリアしませんが、カーソルを移動します
James Owers

1
10年前に修正されたバグのように聞こえます。おそらく、物事をアップグレードする時間です。
トーマスディッキー

0

行数が奇数の場合、tput cupページ全体をクリアします。
これをこのように書くとそれが修正されます:

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

-1

残りを維持しながら画面の半分をクリアしたい場合は、これでうまくいきます。

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)、他の回答を実行すると、出力の前半は残りますが、このコマンドは後半(つまり、最新の出力)になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.