端末を消去する方法はありますか?しかし、プロンプトを画面の上部に置かずに途中に置きますか?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)
出力の前半が残り、このコマンドは後半(つまり最新の出力)が残ります。