web-dev-qa-db-ja.com

ホスト名を色にハッシュする

ホストごとに特定の色を設定して、適切なホストにログインしていることを確認したいと思います。 .bashrcを別のホストにコピーし、ホストごとに異なる色で編集します。

ただし、各ホストの色を手動で編集する必要はなく、代わりに、各ホストのbashプロンプトの色に、ホスト名ごとに異なる色を自動的に入力したいと思います。

.bashrcで、ホスト名を取得し、それを一意の色に変換して、bashプロンプトの色に設定するコマンドを想像しています。

質問:ホスト名をbashの色にハッシュするにはどうすればよいですか?

ターミナルの背景色に基づいて、適切な色のセットを判断することもあります。

7
Hatshepsut

これは、背景に基づいて「素敵な」色にならない場合がありますが、デフォルトの背景色が常に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_を追加して印刷します。
8
J Earls

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")を使用できます。

例については、以下を参照してください。

demo

3
ramnes