新的 bash 提示导致问题

rub*_*bik 5 bash prompt

我将 bash 提示符更改为:

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

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

jw0*_*013 9

让我们把它清理一下,让它更便携。一般来说,最好使用tput生成控制序列而不是硬编码它们,如Bash FAQ 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\] "
Run Code Online (Sandbox Code Playgroud)

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

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

  • 谢谢!我不知道`tput`。这样一切都更加清晰易读。谢谢! (2认同)
  • 哇它工作得很好。我刚刚在字符串的开头添加了 `bold_style=$(tput bold)` 和 `\[$bold_style\]` 以使所有内容都像我的问题一样加粗。 (2认同)