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 2
(OSC
はい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