更改 bash PS1 颜色会破坏 bash 命令行

更改 bash PS1 颜色会破坏 bash 命令行

嗨,我正在使用 Fedora 37,遇到了下一个问题。在我的情况下, 向我的文件中
添加 内容会导致这种意外行为。当我开始输入 bash 命令并填满整行时,字符不会转到下一行,而只是继续在同一行中打印出来,覆盖行首的内容。例如:export PS1="\e[43;39m[\t]\w\r\n[\u@\h]\\$\e[40m \[$(tput sgr0)\]".bashrc/home/username1 我不太熟悉 bash 语法,因此希望得到专家的帮助。

答案1

正如 pynexj 指出的那样,你需要牙套。 但是,那输出可能比您预期的要多。您应该使用基本的转义序列使其保持简单。

你还有“[40 分钟“。我认为那是拼写错误,应该是”[0米",这是“重置属性”的序列。

尝试使用这个:

export PS1="\[\e[43;39m\][\t]\w\r\n[\u@\h]\\$\[\e[0m\]"

此外,我个人会使用“;30 分钟“ 代替 ”;39 分钟“。相应的定义是:

export PS1="\[\e[43;30m\][\t]\w\r\n[\u@\h]\\$\[\e[0m\]"

为了进行比较,在 Ubuntu MATE 20.04 上,.bashrc 定义是:

export PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "

由于我在使用原始字符串时遇到了同样的问题,因此我可以解释发生了什么。

当你让输入缓冲区填满时,它会提前回绕,达到终端宽度,并且这个距离相当于未被方括号正确“框住”的字符数。由于未被正确框住,虽然不可见,但它们被计入行缓冲区字符数的行宽中,因此它在第一列执行了“回车”,覆盖了那里的内容。因此,curses 逻辑没有遇到“行结束”条件,因此它没有启动预期的换行符。

相关内容