加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Bash自定义提示打破长命令行的包装

发布时间:2020-12-13 17:57:02 所属栏目:Linux 来源:网络整理
导读:我有一个自定义bash提示符,用于为我的用户名,主机名和当前工作目录着色.颜色显示正确,但是当我键入需要换行的命令行时,终端不会启动新行,并在命令的开头写入.这发生在RHEL 4和Debian上. This question详细介绍了OS X上的类似问题;似乎这是一个错误终止的控制
我有一个自定义bash提示符,用于为我的用户名,主机名和当前工作目录着色.颜色显示正确,但是当我键入需要换行的命令行时,终端不会启动新行,并在命令的开头写入.这发生在RHEL 4和Debian上.

This question详细介绍了OS X上的类似问题;似乎这是一个错误终止的控制序列的问题,但是我无法看到可能导致这种情况的原因,因为我在各地使用$(tput)代码,而不是手工制作我的代码.下面的片段 – 是否有人能够建议我做错了什么?

# Control codes

COL_RST=$(tput sgr0)  # Remove all colour formatting
COL_BRIGHT=$(tput bold) # Emphasise

# Foreground
COL_G=$(tput setaf 2) # Green
COL_Y=$(tput setaf 3) # Yello
COL_B=$(tput setaf 4) # Blue

COL_USR=${COL_Y}${COL_BRIGHT}
COL_PWD=${COL_B}${COL_BRIGHT}
COL_HST=${COL_G}${COL_BRIGHT}

# Set prompt
PROMPT="${COL_USR}u${COL_RST}@${COL_HST}h${COL_RST}:${COL_PWD}W${COL_RST}"

# Put it all together....
PS1="[$PROMPT]$"

export PS1

解决方法

在转义的方括号中包装每个颜色变量:
[${COL_USR}]

要么

COL_USR="[${COL_Y}${COL_BRIGHT}]"

这告诉Bash这些被认为是零宽度.

这与您链接的问题中描述的完全相同.如果执行以下命令,您将看到您的变量包含与“手工”变量类似的字符序列.使用tput只能使事物可移植到多个$TERM类型,它不会影响代码序列的长度.正是这个长度让人失望.

echo ${COL_USR} | hexdump -c

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读