注:問題を明確にするために質問を書き直しました。質問はいくつかの属性を持っているため、これはいくつかの部分で答えることができる簡単な質問です。
残念ながら、質問をした人が回答の一部と質問の構造を理解している(知っている)場合、質問は書き直される可能性があります。
したがって、質問は元の質問とは異なる視点から提示されます。
シェルユーティリティを使用してLinuxコンソールのカラー設定を変更する方法?シェルユーティリティを使用してターミナルエミュレータのカラー設定を変更する方法?
もともと、シェルスクリプトの実行中にLinuxコンソールの背景色を変更したかったのです。次の命題は私が望んだように機能します。
#!/bin/sh
# set the background color of the terminal
tput setab 6
clear
printf "%s\n" 'background: cyan'
# do some tasks
cd /usr/src/initramfs
pwd
ls -l
# the background of the Shell output is cyan
それにもかかわらず、誰かがいくつかの不具合(または困難)に遭遇するかもしれません。
たとえば、画面がクリアされていない場合、背景色はシェルスクリプトの実行中にテキスト出力にのみ適用されます。コマンドtput setab 6
はコマンドラインで送信され、画面はクリアされず、背景色は出力テキストのごく一部にのみ適用されます。コマンドtput setab 6
はコマンドラインで送信され、画面はクリアされます。背景色は全画面に適用されますが、別のコマンドが送信されるまで保持されます。 [...]
¹ 背景色
背景を色1(赤)に設定するには:
printf %b '\e[41m' '\e[8]' '\e[H\e[J'
最初のエスケープ(setab
)は背景を色1に設定し、2番目のエスケープは現在の前景と背景のペアをdefaultとして定義し、3番目のエスケープは(clear
)は画面をクリアします。
今後、「赤」がデフォルトの背景になります:
printf %b 'World\e[42mWide\e[mWeb\n'
setab 2
(\e[42
)を使用して背景を緑に設定し、その後にsgr0
(\e[m
)を使用して属性をクリアしても、設定が消去されないことに注意してください。
または、「パレットを設定」(別名initc
= "initialize_color")エスケープを使用して、色0(デフォルトの背景、黒)の意味を再定義できます。
printf %b '\e[40m' '\e[8]' # set default background to color 0 (black)
printf %b '\e]P0ff0000' # redefine color 0 as 'red'
後者はnRRGGBB
の形式の引数を取ります。ここで、n
は色番号、RRGGBB
は色を定義する16進トリプレットです。
このエスケープは PuTTY でもサポートされています。
これらの関数などの説明については、console_codes(4)およびterminfo(5)のマンページを確認してください。
私もできませんでした:
a)clear
で画面のすべてをワイプせずに画面の背景色を変更します。
b)Control-Alt-Fnで仮想端末間を行き来することなく、画面の非文字マージンを更新するように強制します。
これは、背景を明るい緑に設定します。画面をクリアする必要はありません。
printf %b '\e]11;#ccffcc\a'
mlterm
、rxvt
、gnome-terminal
、konsole
などでも正常に動作します。
代替形式\e]11;rgb:cc/ff/cc\a
( here から取得)は、konsole
ではサポートされていません(12.16.0バージョンでテスト済み)。
これはtmux
またはscreen
内では機能しません。
xterm
のエスケープはすべて、ソースコードの ctlseqs.txt ファイルに記載されています。
注:
一部のエスケープ(例:\e[8]
または\e]11;...\a
)は、terminfoに含まれておらず、tput
ではまったく使用できませんが、その他(例:initc
)クリーンな方法で使用するには厄介です。
Terminfoデータベースのグラップ可能なバージョンは、次のようなコマンドで取得できます:find /usr/share/terminfo -type f -printf '%f\n' | xargs -n1 infocmp -0 -A /usr/share/terminfo