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

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

概述我有一个自定义bash提示符,用于为我的用户名,主机名和当前工作目录着色.颜色显示正确,但是当我键入需要换行的命令行时,终端不会启动新行,并在命令的开头写入.这发生在RHEL 4和Debian上. This question详细介绍了OS X上的类似问题;似乎这是一个错误终止的控制序列的问题,但是我无法看到可能导致这种情况的原因,因为我在各地使用$(tput)代码,而不是手工制作我的代码.下面的片 我有一个自定义bash提示符,用于为我的用户名,主机名和当前工作目录着色.颜色显示正确,但是当我键入需要换行的命令行时,终端不会启动新行,并在命令的开头写入.这发生在RHEL 4和Debian上.

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

# Control codesCol_RST=$(tput sgr0)  # Remove all colour formattingCol_BRIGHT=$(tput bold) # Emphasise# ForegroundCol_G=$(tput setaf 2) # GreenCol_Y=$(tput setaf 3) # YelloCol_B=$(tput setaf 4) # BlueCol_USR=${Col_Y}${Col_BRIGHT}Col_PWD=${Col_B}${Col_BRIGHT}Col_HST=${Col_G}${Col_BRIGHT}# Set promptPROMPT="${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
总结

以上是内存溢出为你收集整理的linux – Bash自定义提示打破长命令行的包装全部内容,希望文章能够帮你解决linux – Bash自定义提示打破长命令行的包装所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1042649.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存