我最近开始使用 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"'
应该可以工作,但在这种情况下,您需要拥有不带\[ \]
.