これは、背景に基づいて「適切な」色を取得しない場合がありますが、デフォルトの背景色が常に 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" ).
以下に例を示します:
