任意の文字列からカラーコードを生成する

任意の文字列からカラーコードを生成する

私のシェルプロンプトは、サーバーのホスト名によって自動的に異なり、一意で一貫した色を持つことを望みます。

たとえば、特定のサーバーにログインするとき、プロンプトはそのサーバーに固有の色でなければならず、次にそのサーバーにログインするときにも同じ色でなければなりません。サーバー名と色のマッピングをハードコードしたくありません。色が必ずきれいである必要はありませんが、暗い背景にコントラストが高いと良いです。

したがって、ホスト名の決定的なハッシュを生成し、プロンプトで使用できるカラーコードに変換できます。

どうすればいいですか?

答え1

私は結局この仕事をしました。

# get hash and byte size
prompt_hash_and_size=`hostname|cksum`
# get hash part and apply modulo 256 to put it in range 1..255
prompt_hashcolor=$(echo $prompt_hash_and_size|awk '{print $1%255 + 1}')
# use it as background color in prompt
PROMPT="%K{${prompt_hashcolor}}%F%~%f%k%  "

圧縮して使用することができます

prompt_hashcolor=$(hostname|cksum|awk '{print $1%256}')

答え2

ローカルネットワークの場合は、IPアドレスの最後のオクテットをデフォルトで使用してみてください。コントラストを確保するために、いくつかのビットを並べ替え、いくつかの1つまたは重複を混在させることもできます。

/etc/hostsからホスト名とIPを抽出し、ローカル端末でメソッドを調整することで、このプロセスをローカルで評価できます。

リモートホストの構成ファイルでこれを行うことをお勧めします。すべてのプロンプトに対してこれを再生成するにはコストがかかりすぎます。

答え3

これにより、読み取り可能な色の組み合わせが選択されます。

サーバーによって異なる色のプロンプトを取得するにはどうすればよいですか?

関連情報