【问题标题】:bash prompt line setting issue [duplicate]bash提示行设置问题[重复]
【发布时间】:2021-09-13 15:03:06
【问题描述】:

我正在使用 xshell 连接 centos 的云服务,我将 /etc/bashrc 中的 $PS1 值设置为 \e[0;34m[\u@\h \W]$ \e[m 这使我的提示变为蓝色,以便我可以分辨哪个是我的命令输入,哪个是我的命令输入是输出。

但是,如果我的命令多于一行,则此提示无法自动添加新行。如果一行已满,则从同一行的左侧开始填充。可以看到截图如下:

我想要的是该命令可以在一行满时自动添加新行。

我试过 \n 但只是在命令之前添加一个新行,这不是我想要的效果

现在我试了PS1='[\e[0;34m[\u@\h \W]$ \e[m]',效果是这样的:

【问题讨论】:

  • 你能接受:PS1='\[\e[0;34m[\u@\h \W]$ \e[m\]' 吗?
  • @koyaanisqatsi 只是尝试你的 PS1,但这不是我想要的效果。效果贴在主帖处。

标签: bash prompt


【解决方案1】:

bash 无法确定您的提示在屏幕上实际占用了多少空间,因为设置颜色的 ANSI 转义序列不占用任何空间。您需要将它们(并且它们)包含在\[...\] 中,以尽可能多地告诉bash

PS1='\[\e[0;34m\][\u@\h \W]$ \[\e[m\]'

bash 已经知道如何处理自己的转义序列\u\h\W。 ANSI 转义序列仅对 终端 具有特殊意义。

也就是说,\u et al 被扩展之前 bash 试图确定提示中有多少个字符。据它所知,\e[0;34m 都将按字面意思显示为单个字符。终端看到它们,而不是显示它们,而是更改用于打印以下字符的颜色。

【讨论】:

  • 谢谢。实际上,您的 PS1 的末尾似乎有一个额外的“]”。我用 PS1='\[\e[0;34m\][\u@\h \W]$ \[\e[m\]' 得到了正确的效果。
猜你喜欢
  • 1970-01-01
  • 2016-07-01
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2011-09-12
  • 1970-01-01
相关资源
最近更新 更多