我已经通过 tput 使用颜色对我的提示做了一些修改。
现在看起来,当我尝试arrow up
在几次移动之后进行查找时,提示被减少了一半,我的意思是:
由此:
PROD [email protected]:~$ vim .bashrc
对此:
PROD mysuer@servegit rebase origin/add_pool
ctrl + c
使一切恢复正常。
我发现一些帖子表明这可能是由于缺少转义符的问题造成的,[
但是我在这里没有看到问题:
我的代码:
#red for prod, green for lab
COLOUR_RESET=$(tput sgr0)
COLOUR_GREEN=$(tput setaf 2)
COLOUR_BLUE=$(tput setaf 6)
COLOUR_YELLOW=$(tput setaf 3)
COLOUR_RED=$(tput setaf 1)
BOLD=$(tput bold)
if [[ $HOSTNAME =~ .*\.domain.com$ ]]; then
COLOUR=$COLOUR_RED
PROMPT_TEXT="PROD"
fi
if [[ $HOSTNAME =~ .*\.lab$ ]]; then
COLOUR=$COLOUR_BLUE
PROMPT_TEXT="LAB"
fi
MYPROMPT="$COLOUR$BOLD$PROMPT_TEXT$COLOUR_RESET \[\u@$COLOUR$BOLD$(hostname -f)$COLOUR_RESET:\w\]\$ "
PS1=$MYPROMPT
更新:@KamilMaciorowski 指出了一个类似的问题,尽管它与 tput 颜色无关。
答案1
我的答案别处几乎足够了,您应该将 的输出包装tput
在 中\[ \]
。
几乎足够了,因为你已经\[ \]
有了错误的地方;你应该除掉它们。man 1 bash
说:
\[
开始一个非打印字符序列,可用于将终端控制序列嵌入到提示符中
\]
结束非打印字符序列
这意味着 eg$(hostname -f)
应该在任何 之外\[ \]
。因此
- 从明确定义中删除
\[
和并将每个替换为;\]
MYPROMPT
=$(tput …)
='\['"$(tput …)"'\]'
或者
只改变
MYPROMPT
定义。我调整了你原来的定义:MYPROMPT="\[$COLOUR$BOLD\]$PROMPT_TEXT\[$COLOUR_RESET\] \u@\[$COLOUR$BOLD\]$(hostname -f)\[$COLOUR_RESET\]:\w\$ " # printing ^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^ ^^^^^^ # non-pr. ^^^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^
答案2
最后我不得不放弃这些颜色。
我的最后一个提示是:
if [[ $HOSTNAME =~ .*\.domain.com$ ]]; then
PROMPT_TEXT="PROD"
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]$PROMPT_TEXT\[\033[00m\] \[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
fi
if [[ $HOSTNAME =~ .*\.lab$ ]]; then
PROMPT_TEXT="LAB"
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;34m\]$PROMPT_TEXT\[\033[00m\] \[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
fi