新的 bash 提示符导致问题

新的 bash 提示符导致问题

我将 bash 提示更改为:

PS1="\[\033[1;31m[\[\033[1;33m\$(date +%H:%M)\[\033[1;31m] \u:\[\033[1;32m\W\[\033[1;37m\$\[\033[0m\] "

抱歉排了很长的队,这主要是由于颜色的原因。基本上,当我点击向上箭头返回 Bash 历史记录时,提示就会消失,一切都搞砸了。它类似于这个问题但我不知道 a 是否\[ 缺失以及在哪里。

答案1

让我们稍微清理一下它并使其更加便携。一般来说,最好使用tput生成控制序列而不是对其进行硬编码,如中所述Bash 常见问题解答 53。这样就更容易找到你失踪的人\]

red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
white=$(tput setaf 7)
reset=$(tput sgr0)
PS1="\[$red\][\[$yellow\]\A\[$red\]] \u:\[$green\]\W\[$white\]\$\[$reset\] "

请注意,我用显示相同内容(24 小时格式)的date内置提示转义替换了您的调用。 \AHH:MM

这种方法有一个警告,如链接的 Bash FAQ 中所述,如果任何控制tput序列输出恰好包含提示转义的内容,则输出将出现乱码。我从来没有遇到过这个问题,所以我通常会忽略它。

答案2

\[你的和不平衡\]。控制序列需要包含在其中,以便 bash 知道它们实际上并不占用终端中的任何空间。

尝试这个:

PS1="\[\033[1;31m\][\[\033[1;33m\]\$(date +%H:%M)\[\033[1;31m\]] \u:\[\033[1;32m\]\W\[\033[1;37m\]\$\[\033[0m\] "

@jw013的解决方案但更好,因为它更干净。

答案3

ASCII 表有颜色、粗体、斜体等参考。

相关内容