これは、背景に基づいて「適切な」色を取得しない場合がありますが、デフォルトの背景色が常に color 0
であると仮定すると、機能するはずです。 :
tput setaf $(hostname | sum | awk -v ncolors=$(infocmp -1 | expand | sed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p") 'ncolors>1 {print 1 + ($1 % (ncolors - 1))}')
これを分解するには:
tput
- 端末制御文字列を出力するsetaf
- 端末制御文字列。この場合、set ANSI foreground
$(...)
- color パラメーターの BASH ネスト可能コマンド置換hostname
- ホスト名を取得sum
- ホスト名の単純なチェックサムを計算しますawk
...-v ncolors=$(...)
- AWK 変数ncolors
を設定します$(...)
内のコマンド置換の値にinfocmp -1
- 現在の端末タイプに関する端末情報を 1 行に 1 つのパラメーターで表示expand
- タブをスペースに展開してsed
を作成します スクリプトをもう少し簡単にsed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"
- 整数colors
の値を抽出します 端末機能
'ncolors>1 {...}'
-{...}
を実行する awk スクリプトncolors
の場合のみコード 1より大きいprint 1 + ($1 % (ncolors - 1))
-絶対的な$1
を取る (sum
からの入力のフィールド 1 、つまり$1
はチェックサム値)、(ncolors - 1)
で割った余りを求める (これは範囲0
に制限する効果があります(ncolors - 2)
まで )、次に1
を追加します
context-color
に興味があるかもしれません 、J Earls の回答に基づいてまとめました:https://github.com/ramnes/context-color
これは、実行時にコマンド出力のハッシュに基づいて色を出力する単純なスクリプトです。 $PATH
のどこかにインストールすると 、 .bashrc
で次のようなことができます :
export PS1="$(context-color -p)$PS1\[\e[0m\]"
(ここで --prompt/-p
プロンプトの色をエスケープするためのスイッチで、\[\e[0m\]
色をリセットするエスケープ シーケンス)
デフォルトでは、ハッシュの生成に使用されるコマンドは whoami; hostname
です .ホスト名に応じて色を変更したいだけの場合は、 $CONTEXT
を変更できます 可変環境 (export CONTEXT="hostname"
) または単に --context/-c
を使用します オプション (context-color -c "hostname"
).
以下に例を示します: