向 bash 右侧提示添加颜色会导致不良行为

向 bash 右侧提示添加颜色会导致不良行为
rightprompt() {
    green=$(tput setaf 156)
    yellow=$(tput setaf 228)
    red=$(tput setaf 203)
    printf "%*s" $COLUMNS "${green}$(date +%a), ${yellow}$(date +%b\ %d), ${red}$(date +%H:%M)"
}
PS1='\[$(tput sc; rightprompt; tput rc)\]╭─\[\e[1;33m\]\u\[\e[31m\]@\[\e[32m\]\h\[\e[m\] in \[\e[1;36m\]\w\n╰─\[\e[35m\]\[\e[m\] '

上面的代码在我的.bashrc。我使用 Archlinux x86_64 和 alacritty 终端仿真器。

此代码导致右侧提示从终端边缘向左移动。显示此移动的屏幕截图: 右侧提示明显向左移动

提供其他图像以供参考(每个后续图像均删除了一种颜色): 何时{red}删除: 向左移动较少

何时{yellow}移除: 左移更少

何时{green}移除: 无左移

不添加颜色时不会发生偏移,因此这些颜色变量就是问题所在。每个变量都会tput setaf以某种方式干扰$COLUMNS%*s以某种方式干扰,我不知道该怎么办。

相关内容