GabrijelOkorn Asked: 2022-12-04 04:29:29 +0800 CST2022-12-04 04:29:29 +0800 CST 2022-12-04 04:29:29 +0800 CST 更改 bash PS1 颜色会破坏 bash 命令行 [重复] 772 您好,我正在使用 Fedora 37 并遇到了下一个问题。 在我的案例中添加 export PS1="\e[43;39m[\t]\w\r\n[\u@\h]\\$\e[40m \[$(tput sgr0)\]" 到我的.bashrc文件/home/username 导致了这种意外行为。当我开始输入 bash 命令并填满整行时,字符不会转到下一行,而是继续打印在同一行中,覆盖行首的内容。例如:1 我不是很熟悉 bash 语法,所以我希望得到专家同行的帮助。 bash 1 个回答 Voted Best Answer Eric Marceau 2022-12-04T16:34:44+08:002022-12-04T16:34:44+08:00 如 pynexj 所示,您需要大括号。但是,tput的无效化可能比您预期的要多。您应该使用基本的转义序列保持简单。 你的原始字符串中也有“ [40m ”。我认为这是一个错误的输入,应该是“ [0m ”,这是“重置属性”的顺序。 尝试改用这个: export PS1="\[\e[43;39m\][\t]\w\r\n[\u@\h]\\$\[\e[0m\]" 另外,我个人会使用“ ;30m ”而不是“ ;39m ”。相应的定义是: 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\]\$ " 由于我在使用您的原始字符串时遇到了同样的问题,因此我可以解释发生了什么。 当您让输入缓冲区填满时,它会在到达终端宽度之前提前环绕,并且这个距离等于未被方括号正确“框住”的字符数。框架不正确,虽然不可见,但它们被计为行缓冲区字符数的线宽的一部分,因此它对第一列进行了“回车”,覆盖了那里的内容。因此,诅咒逻辑没有遇到“行结束”条件,所以它没有启动预期的换行。
如 pynexj 所示,您需要大括号。但是,tput的无效化可能比您预期的要多。您应该使用基本的转义序列保持简单。
你的原始字符串中也有“ [40m ”。我认为这是一个错误的输入,应该是“ [0m ”,这是“重置属性”的顺序。
尝试改用这个:
另外,我个人会使用“ ;30m ”而不是“ ;39m ”。相应的定义是:
作为对比,在 Ubuntu MATE 20.04 上,.bashrc 定义为:
由于我在使用您的原始字符串时遇到了同样的问题,因此我可以解释发生了什么。
当您让输入缓冲区填满时,它会在到达终端宽度之前提前环绕,并且这个距离等于未被方括号正确“框住”的字符数。框架不正确,虽然不可见,但它们被计为行缓冲区字符数的线宽的一部分,因此它对第一列进行了“回车”,覆盖了那里的内容。因此,诅咒逻辑没有遇到“行结束”条件,所以它没有启动预期的换行。