Bash端末の特定のスペースに何かを印刷します。

Bash端末の特定のスペースに何かを印刷します。

10分ごとにコマンドラインにラップトップのバッテリ寿命を知らせるスクリプトを書いていましたが、問題はそれをコマンドラインに反映することです。たとえば、端末の右上に印刷したいと思います。

それは可能ですか?

例: 端末ウィンドウは次のようになります。

=====================
|texttexttexttexttex|
|t                  |
|moretext           |
|somethingsomething |
|me@me:~$...        |
=====================

コマンドが実行された後の結果は次のとおりです。

=====================
|texttexttextBAT-50%|
|t                  |
|moretext           |
|somethingsomething |
|me@me:~$...        |
=====================

これにより、そこに書かれた内容を上書きします。

答え1

使用ターミナルエスケープシーケンスカーソルを移動します。ほとんどすべての端末は、ANSIで標準化され、VT100で普及した共通のエスケープシーケンスセットを使用します。しかし、あなたは使用することができます用語情報移植性と可読性の2つの利点を持つ端末のエスケープシーケンスを見つけるデータベースです。あなたはそれを使用することができますtput放出効果用語情報機能

print_in_top_right () {
  local columns=$(tput cols)           # get the terminal width
  local text=${1:0:$columns}           # truncate the text to fit on a line if needed
  tput sc                              # Save the Cursor position
  tput cup 0 $((columns - ${#text}))   # move the CUrsor Position to the top line, with just enough space for $text on the right
  printf %s "$text"
  tput rc                              # Restore the Cursor position saved by sc
}

端末がスクロールすると、このテキストも一緒にスクロールされます。一部のテキストを端末にオーバーレイする汎用ツールはありません。これを行うには、この機能を備えた端末エミュレータが必要です。通常、この目的のために専用回線を予約します。ほとんどのグラフィック端末エミュレータでは、ウィンドウのタイトルを見ることができます。xterm互換エスケープシーケンス OSC 2OSCはいESC ])。

set_window_title () {
  printf '\e]2;%s\007' "$1"
}

答え2

ターミナルの11行31列にMSGを作成し、ウィンドウの下部にシェルプロンプトを再度挿入するには、次のようにします。

echo "$( tput cup 10 30 )${MSG}$( tput cup ${LINES} 0))" && echo

答え3

これはあなたに役立ちますBATTERY=50

端末の列番号を見つけて、テキストのカーソルを調整して「BAT $BATTERY%」を印刷します。

echo "$(tput cup 0 $(expr $(tput cols) - 7))BAT $BATTERY%" && echo

関連情報