次のページ 前のページ 目次へ

9. 動的にプロンプトの色を変える

9.1 どうすれば可能か

これは魅力的なプロンプトというよりは、動的にプロンプトを変えるには こうすれば可能であるという例示です。この例では、ホスト名がシステム 負荷に応じて色を変えます(警告になります)。


#!/bin/bash
#   "hostloadcolour" - 17 October 98, by Giles
#
#   この例は、プロンプトのホスト名を負荷の値によって変えます。


# THRESHOLD_LOAD は、プロンプトの色を COLOUR_LOW から COLOUR_HIGH に
# 変える1分間の負荷量(の100倍)を示します。
THRESHOLD_LOAD=200
COLOUR_LOW='1;34'
          # ライトブルー
COLOUR_HIGH='1;31'
           # ライトレッド

function prompt_command {
ONE=$(uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), \(.*\...\)/\1/" -e "s/ //g")
#   bcのscaleは、乗算には適用されず、除算に適用されるようです。
ONEHUNDRED=$(echo -e "scale=0 \n $ONE/0.01 \nquit \n" | bc)
if [ $ONEHUNDRED -gt $THRESHOLD_LOAD ] 
then 
    HOST_COLOUR=$COLOUR_HIGH
        # ライトレッド
else
    HOST_COLOUR=$COLOUR_LOW
        # ライトブルー
fi
}

function hostloadcolour {

PROMPT_COMMAND=prompt_command
PS1="[$(date +%H%M)][\u@\[\033[\$(echo -n \$HOST_COLOUR)m\]\h\[\033[0;37m\]:\w]$ "
}

好みのエディタを使って、これを hostloadcolour というファイルに保存します。 Bashprompt パッケージがインストールされているなら、これはテーマファイルに なります。もしインストールしていないなら、source hostloadcolour に続いて、hostloadcolourとします。どちらにしても prompt_command が あなたの環境の関数になります。コードをみると、色($COLOUR_HIGHと$COLOUR_LOW) は色コードの一部つまり"\[\033[1;34m\]"(こうしたかったのですが)ではなく "1;34"で定義されていることに気づくでしょう。完全な色コードを使いたかった のですが、動きませんでした。どうしたらいいか分かったら教えてください。


次のページ 前のページ 目次へ