Как сделать так, чтобы цвет бита в терминале менял цвет каждой строки?
В настоящее время у меня есть это:
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, чтобы избежать некоторой странности чтения строки.