PS1 包含换行符时换行被破坏

PS1 包含换行符时换行被破坏

我最近开始使用 Linux,并认为能够查看工作目录(而不仅仅是基本名称)会很有用,因此将文件更改~/.bashrc为:

#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

alias ls='ls --color=auto'
LGREEN="\[$(tput setaf 10)\]"
DGREEN="\[$(tput setaf 28)\]"
GREEN="\[$(tput setaf 2)\]"
RESET="\[$(tput setaf 255)\]"
TEAL="\[$(tput setaf 123)\]"
PS1="${RESET}/${LGREEN}\u@${GREEN}\t${DGREEN} \w ${RESET}\n\\ \[\[\033[5m\]${TEAL}>>\[\033[0m\]\]" 

我已经尝试了我能想到的一切:将转义字符包装在 中\[\],再次将颜色变量包装在 中\[\],但没有任何效果,同样的事情会发生:如果我输入的命令太长而无法放在一行中,它没有被正确包裹并继续下一行,而是与自身重叠并且看起来破损。

答案1

我认为换行符应该在那里工作,因为\n转义被明确列为提示转义之一。 shell 也应该很容易解释,它只需要在跳转到下一行时将提示长度重置为零。

据我测试,似乎加倍\[\[\]\]最终引起了问题。

在这里,您在整个最后部分周围有一组\[ \],然后在其中有两组相同的内容。

\[\[\033[5m\]${TEAL}>>\[\033[0m\]\]
  ^^^^^^^^^^^         ^^^^^^^^^^^

您可能应该删除外部的:

\[\033[5m\]${TEAL}>>\[\033[0m\]

颜色代码很好,因为您在设置时使用双引号PS1,因此颜色变量在赋值时得到扩展,并且\[ \]它们中的转义起作用。


如果两行提示确实不起作用,您始终可以通过 打印第一行PROMPT_COMMAND

类似的东西PROMPT_COMMAND='printf "${RESET}/${LGREEN}$USER@${GREEN}$(date +%T)${DGREEN} $PWD ${RESET}\n"'应该可以工作,但在这种情况下,您需要拥有不带\[ \].

相关内容