10.1. “概念验证”示例

这与其说是一个美观的提示符,不如说是一个“概念验证”:动态更改提示符中的颜色。 在此示例中,主机名的颜色会根据负载而变化(作为警告)。

#!/bin/bash
#   "hostloadcolour" - 17 October 98, by Giles
#
#   The idea here is to change the colour of the host name in the prompt, 
#   depending on a threshold load value.

# THRESHOLD_LOAD is the value of the one minute load (multiplied
# by one hundred) at which you want
# the prompt to change from COLOUR_LOW to COLOUR_HIGH
THRESHOLD_LOAD=200
COLOUR_LOW='1;34'
          # light blue
COLOUR_HIGH='1;31'
           # light red

function prompt_command {
ONE=$(uptime | sed -e "s/.*load average: \(.*\...\), \(.*\...\), \(.*\...\)/\1/" -e "s/ //g")
#   Apparently, "scale" in bc doesn't apply to multiplication, but does
#   apply to division.
ONEHUNDRED=$(echo -e "scale=0 \n $ONE/0.01 \nquit \n" | bc)
if [ $ONEHUNDRED -gt $THRESHOLD_LOAD ] 
then 
    HOST_COLOUR=$COLOUR_HIGH
	# Light Red
else
    HOST_COLOUR=$COLOUR_LOW
	# Light Blue
fi
}

function hostloadcolour {

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

使用您喜欢的编辑器,将其保存到名为“hostloadcolour”的文件中。 如果您安装了 Bashprompt 包,这将作为一个主题工作。 如果没有,请键入source hostloadcolour然后hostloadcolour。 无论哪种方式,“prompt_command”都会成为您环境中的一个函数。 如果您检查代码,您会注意到颜色($COLOUR_HIGH 和 $COLOUR_LOW)仅使用部分颜色代码设置,即“1;34”而不是“\[\033[1;34m\]”,而我更喜欢后者。 我一直无法让它与完整的代码一起工作。 如果您能做到这一点,请告诉我。