目前我有这个:
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"
答案 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怪异。