ホストごとに特定の色を設定して、適切なホストにログインしていることを確認したいと思います。 .bashrc
を別のホストにコピーし、ホストごとに異なる色で編集します。
ただし、各ホストの色を手動で編集する必要はなく、代わりに、各ホストのbashプロンプトの色に、ホスト名ごとに異なる色を自動的に入力したいと思います。
.bashrc
で、ホスト名を取得し、それを一意の色に変換して、bashプロンプトの色に設定するコマンドを想像しています。
質問:ホスト名をbashの色にハッシュするにはどうすればよいですか?
ターミナルの背景色に基づいて、適切な色のセットを判断することもあります。
これは、背景に基づいて「素敵な」色にならない場合がありますが、デフォルトの背景色が常に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
_$(...)
-カラーパラメータの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 {...}'
_-ncolors
が1 [.____より大きい場合にのみ_{...}
_コードを実行するawkスクリプト。]print 1 + ($1 % (ncolors - 1))
-absolute _$1
_(sum
からの入力のフィールド1、つまり_$1
_はチェックサム値)を取得し、その後の余りを見つけます_(ncolors - 1)
_(_0
_から_(ncolors - 2)
_の範囲に制限する効果があります)で除算してから、_1
_を追加して印刷します。Jアールズの回答に基づいてまとめたcontext-color
に興味があるかもしれません: 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"
)を使用できます。
例については、以下を参照してください。