如何使每行中的$ bit颜色变为颜色?

时间:2011-04-04 10:38:11

标签: bash unix .profile

目前我有这个:

function xtitle2()      # Adds some text in the terminal frame.
{
export var1=`echo $HOSTNAME | perl -pe 's/^([a-zA-Z0-9]+)\.(.*)$/\1/g'`
export var2=`pwd`
echo -n -e "\033]0;$var1 : $var2\007"

a=$(( $a + 1 ))
if (( $a > 36 ))
then
    a=30
fi

}


PROMPT_COMMAND="xtitle2"

PS1="\e[0;${a}m$ \e[m"

但它只会在我做

时改变颜色
$. ~/.profile

但我希望每次输入任何命令时都改变颜色......

我该怎么做?

EIDT:

结束了这个:

function xtitle2()      # Adds some text in the terminal frame.
{
export var1=`echo $HOSTNAME | perl -pe 's/^([a-zA-Z0-9]+)\.(.*)$/\1/g'`
export var2=`pwd`
echo -n -e "\033]0;$var1 : $var2\007"

if [ -z $a ]
then
    a=29
fi

a=$(( $a + 1 ))
if (( $a > 36 ))
then
    a=30
fi
PS1="\[\033[${a}m\]$\[\e[0m\]"
}


export PROMPT_COMMAND="xtitle2"

3 个答案:

答案 0 :(得分:1)

在PS1设置中加入“$(xtitle2)”

当然你需要重构一下xtitle2;好消息是你不再为此目的滥用PROMPT_COMMAND了。此外,除了a之外的所有变量都可以是本地的。

您需要使用$(($HISTCMD % 30))而不是使用变量a

的混乱

答案 1 :(得分:1)

而不是PS1="\e[0;${a}m$ \e[m"中的双引号,请使用单引号,如下所示:

PS1='\e[0;${a}m$ \e[m'

...这样每次都会评估${a}

答案 2 :(得分:0)

基本上PROMPT_COMMAND是您可能正在寻找的Bash功能。

来自man bash(1)

  

PROMPT_COMMAND

     

如果设置,则在发出每个主要提示之前将该值作为命令执行。

所以:

function rotate_prompt_colour() {
    ROTATE_COLOUR=$(( (ROTATE_COLOUR + 1) % 7))
    PS1="\h : \w \[\e[$(( 30 + ROTATE_COLOUR ))m\]\$\[\e[0m\] "
}

export PROMPT_COMMAND=rotate_prompt_colour

请注意,PS1有一些有用的转义序列,可以为您节省一些麻烦。另请注意ANSI序列周围的\[...\]以避免某些readline怪异。