2011-04-04 49 views
0

目前,我有这样的:

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" 

回答

1

包含 “$(xtitle2)” 在您的PS1设置

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

你会想在PS1="\e[0;${a}m$ \e[m"使用单引号使用$(($HISTCMD % 30)),而不是与变量的混乱一

+0

更新提示更多提示;看到其他好提示http://stackoverflow.com/questions/4557534/how-can-i-intermittently-show-my-history-command-number-in-my-shell-prompt – sehe 2011-04-04 10:58:46

+0

我结束了与这些沿着这些行,意识到$ {a}没有被每次更改或改变。 – will 2011-04-04 12:02:12

1

代替双引号,像这样:

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

...让${a}将评估每一次。

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怪异。