如何使终端中 $ 位的颜色每行改变颜色?

发布于 2024-10-30 03:56:37 字数 857 浏览 4 评论 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"

currently i have this:

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"

but it only changes the colour when i do

$. ~/.profile

but i want it to change the colour every time any command is entered...

how do i do this?

EIDT:

ended up going with this:

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"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

白况 2024-11-06 03:56:37

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

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

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

Include "$(xtitle2)" in your PS1 setting

Of course you need to refactor xtitle2 a bit; the good news is that you won't have to abuse PROMPT_COMMAND for this purpose anymore. Also, all the vars except a could be local.

You will want to use $(($HISTCMD % 30)) instead of the jumble with variable a

亚希 2024-11-06 03:56:37

PS1="\e[0;${a}m$ \e[m" 中使用单引号代替双引号,如下所示:

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

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

Instead of double quotes in PS1="\e[0;${a}m$ \e[m" use single quotes, like this:

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

... so that ${a} will be evaluated each time.

暖伴 2024-11-06 03:56:37

基本上 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 奇怪的情况。

Basically PROMPT_COMMAND is the Bash feature you are probably looking for.

From man bash(1):

PROMPT_COMMAND

If set, the value is executed as a command prior to issuing each primary prompt.

So:

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

Note that PS1 has some useful escape sequences that can save you some hassle. Also note the \[...\] around ANSI sequences to avoid some readline weirdness.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文