Как сделать так, чтобы цвет бита в терминале менял цвет каждой строки?

В настоящее время у меня есть это:

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 ответа

Решение

Включите "$(xtitle2)" в настройках PS1

Конечно, вам нужно немного реорганизовать xtitle2; хорошая новость заключается в том, что вам больше не придется злоупотреблять PROMPT_COMMAND для этой цели. Кроме того, все переменные, кроме a, могут быть локальными.

Вы хотите использовать $(($HISTCMD % 30)) вместо беспорядка с переменной а

Вместо двойных кавычек в PS1="\e[0;${a}m$ \e[m" используйте одинарные кавычки, например:

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

... чтобы ${a} будет оцениваться каждый раз.

В принципе 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 имеет несколько полезных escape-последовательностей, которые могут избавить вас от хлопот. Также обратите внимание на \[...\] вокруг последовательностей ANSI, чтобы избежать некоторой странности чтения строки.

Другие вопросы по тегам