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

前端之家收集整理的这篇文章主要介绍了linux – Bash自定义提示打破长命令行的包装前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个自定义bash提示符,用于为我的用户名,主机名和当前工作目录着色.颜色显示正确,但是当我键入需要换行的命令行时,终端不会启动新行,并在命令的开头写入.这发生在RHEL 4和Debian上. @H_404_2@This question详细介绍了OS X上的类似问题;似乎这是一个错误终止的控制序列的问题,但是我无法看到可能导致这种情况的原因,因为我在各地使用$(tput)代码,而不是手工制作我的代码.下面的片段 – 是否有人能够建议我做错了什么?

  1. # Control codes
  2.  
  3. COL_RST=$(tput sgr0) # Remove all colour formatting
  4. COL_BRIGHT=$(tput bold) # Emphasise
  5.  
  6. # Foreground
  7. COL_G=$(tput setaf 2) # Green
  8. COL_Y=$(tput setaf 3) # Yello
  9. COL_B=$(tput setaf 4) # Blue
  10.  
  11. COL_USR=${COL_Y}${COL_BRIGHT}
  12. COL_PWD=${COL_B}${COL_BRIGHT}
  13. COL_HST=${COL_G}${COL_BRIGHT}
  14.  
  15. # Set prompt
  16. PROMPT="${COL_USR}\u${COL_RST}@${COL_HST}\h${COL_RST}:${COL_PWD}\W${COL_RST}"
  17.  
  18. # Put it all together....
  19. PS1="[$PROMPT]\$"
  20.  
  21. export PS1

解决方法

在转义的方括号中包装每个颜色变量:
  1. \[${COL_USR}\]
@H_404_2@要么

  1. COL_USR="\[${COL_Y}${COL_BRIGHT}\]"
@H_404_2@这告诉Bash这些被认为是零宽度.

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

  1. echo ${COL_USR} | hexdump -c

猜你在找的Linux相关文章