如何正确逃生bash提示符Unicode字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确逃生bash提示符Unicode字符相关的知识,希望对你有一定的参考价值。
我有我的bash提示符的具体方法,比方说,它看起来像这样:
CHAR="༇ "
my_function="
prompt=" [$CHAR]"
echo -e $prompt"
PS1="$(${my_function}) $ "
为说明上述情况,我通过执行存储在一个字符串,这是因为this question的结果作出决定功能builidng我的bash提示符。让我们假装它工作得很好,因为这样做,除非Unicode字符涉足
我想找到逃跑Unicode字符的正确方法,因为现在它与bash的线路长度食堂。一个简单的方法来测试,如果它坏了是键入长命令,执行它,按CTRL-R并键入找到它,然后按CTRL-A CTRL-E跳至行的开始/结束。如果文本乱码那么它不工作。
我已经试过几件事情要适当地逃逸函数字符串的Unicode字符,但似乎没有奏效。
特殊字符像这样的工作:
COLOR_BLUE=$(tput sgr0 && tput setaf 6)
my_function="
prompt="\[$COLOR_BLUE\] "
echo -e $prompt"
这是我做了提示功能串的主要原因。这转义序列不乱用线长度,它只是Unicode字符。
该[...]
序列说完全忽略字符串的这一部分,当你的提示包含零长度序列,比如哪些改变文字颜色或标题栏中显示的控制序列是有用的,说。但是,在这种情况下,要打印字符,因此它的长度不为零。也许你可以解决这个,比方说,使用无操作转义序列愚弄猛砸到计算正确的线路长度,但它听起来像这样疯狂的谎言。
正确的解决方案将是在击行长度计算正确神交UTF-8(或任何Unicode编码它是您正在使用)。嗯,你试过没有[...]
序列?
编辑:下面我实现了在下面的意见提出解决方案。光标位置将被保存,则两个空间被印刷,[...]
之外,则光标位置被恢复,和Unicode字符印刷在两个空间的顶部。这是假定一固定宽度的字体,与用于Unicode字符双倍宽度。
PS1='['"`tput sc`"'] ['"`tput rc`"'༇ ] $ '
至少在OSX终端,击3.2.17(1) - 释放,这通过粗略[原文如此]测试。
在透明度和可读性的利益,我都忽略了有一个函数内部提示的功能,以及彩色编码的要求;这只是改变了提示字符,空间,美元的提示,空间。配合您的较为复杂的需求。
@tripleee赢得它,在这里张贴最终的解决方案,因为这是一个痛苦的意见,邮编:
CHAR="༇"
my_function="
prompt=" \[`tput sc`\] \[`tput rc`\]\[$CHAR\] "
echo -e $prompt"
PS1="$(${my_function}) $ "
在@ tripleee的链接指出,关键是使用命令tput sc
和tput rc
其保存并恢复光标位置。该代码是有效的节约光标位置,打印两个空格宽度,间隔之前的光标位置恢复到,然后打印特殊字符,以使线的宽度是从两个空间,而不是字符。
(不回答你的问题,但一些指针和有关您的问题的一般经验。)
我看你描述关于CMD行编辑(按Ctrl-R,......按Ctrl-A按Ctrl-E ...)的所有时间的行为,即使没有unicode字符。
在一个工作现场,我花的时间找出TERM设置VS由操作系统(当然,stty的我想)使用的术语定义的终端解释之间的差异。
现在,当我有这个问题,我逃了我目前的尝试编辑该行,再次带来向上行,然后马上去“VI”模式,这会打开vi编辑器。 (新闻只是 'V' 字符,对吧?)。所有的易用性VI一个完整的会话的;为什么用更少的;-)去?
你的问题的描述又看,当你说
my_function="
prompt=" [$CHAR]"
echo -e $prompt"
这只是一个字符串的定义,对不对?和我假设你的假设,这是你的my_function
的输出简化问题的定义。这似乎在创建函数定义,调用函数并使用返回值的步骤,很可能是壳报价不工作,你希望它的方式很多机会。
如果您编辑您的问题包括my_function
定义,其完整的使用(减少你的函数是什么原因造成的问题),也可能是其他人更容易帮助这一点。最后,你经常使用set -vx
?它可以帮助显示如何/ wnen /变量展开的东西,你可以在那里找到的东西。
失败所有这些,看看Orielly termcap & terminfo。您可能需要看看手册页为您的本地系统stty
及相关CMDS,你可能做的很好,寻找用户群特定于您的Linux系统(我假设你使用Linux的变种)。
我希望这有帮助。
以上是关于如何正确逃生bash提示符Unicode字符的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试 - 密室逃生游戏(Java) | 机试题+算法思路+考点+代码解析 2023
华为OD机试真题Java实现密室逃生游戏真题+解题思路+代码(2022&2023)
从文本文件中删除 Unicode 字符 - sed ,其他 Bash/shell 方法