我有一种特定的bash提示符方法,让我们假设它看起来像这样:
CHAR="༇ "
my_function="
prompt=\" \[\$CHAR\]\"
echo -e \$prompt"
PS1="\$(${my_function}) \$ "
为了解释上述问题,我正在通过执行存储在字符串中的函数来构建我的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字符。
tput sc
、打印两个空格、tput rc
、打印你的Unicode字符。这两个空格(或其他具有正确宽度的序列)必须在\[...\]
之外,其余内容则在其中。另请参阅http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html。 - tripleee