Linux 提示符(PS1)在 PuTTy 中无法正确显示(使用 Shift Out/Shift In 进行线条绘制)

Linux 提示符(PS1)在 PuTTy 中无法正确显示(使用 Shift Out/Shift In 进行线条绘制)

我的Linux 提示符设置:

┌─ (USERNAME@HOSTNAME PATH) ->
└─ $

PS1

export PS1="\n\[\033[30;1m\]\[\033(0\]l\[\033(B\]\[\033(0\]q\[\033(B\] (\u@\h \[\033[31;1m\]\w\[\033[30;1m\]) ->\n\[\033(0\]m\[\033(B\]\[\033(0\]q\[\033(B\] \`if [ \$? = 0 ]; then echo \[\e[1\;30m\]\\$\[\e[1m\]; else echo \[\e[1\;31m\]\\$\[\e[0m\]; fi\` \[\033[0m\]"

不知何故,它不能从PuTTy可以正确显示,截图为: 不同之处

设置窗户->翻译在我的 Putty 中:

  • 远程字符集:->UTF-8
  • 线描字符的处理:->Use Unicode line drawing code points

我怎样才能在 My PuTTy 中显示正确的提示?(顺便说一句,我尝试了线描字符的处理:


使用以下方法 PuTTy Prompt 仍然无法工作:

if [ -z "$DISPLAY" ]
then
export PS1="\n\[\033[30;1m\]┌─ (\u@\h \[\033[31;1m\]\w\[\033[30;1m\]) ->\n└─ \`if [ \$? = 0 ]; then echo \[\e[1\;30m\]\\$\[\e[1m\]; else echo \[\e[1\;31m\]\\$\[\e[0m\]; fi\` \[\033[0m\]"
else
export PS1="\n\[\033[30;1m\]\[\033(0\]l\[\033(B\]\[\033(0\]q\[\033(B\] (\u@\h \[\033[31;1m\]\w\[\033[30;1m\]) ->\n\[\033(0\]m\[\033(B\]\[\033(0\]q\[\033(B\] \`if [ \$? = 0 ]; then echo \[\e[1\;30m\]\\$\[\e[1m\]; else echo \[\e[1\;31m\]\\$\[\e[0m\]; fi\` \[\033[0m\]"
fi

new_ps1

答案1

解决此问题的方法是停止使用“移出/移入”序列,并开始将画线字符直接作为 UTF-8 包含(就像您在示例中所做的那样):

PS1="\n\[\033[30;1m\]┌─ (\u@\h \[\033[31;1m\]\w\[\033[30;1m\]) ->\n└─ \`if [ \$? = 0 ]; then echo \[\e[1\;30m\]\\$\[\e[1m\]; else echo \[\e[1\;31m\]\\$\[\e[0m\]; fi\` \[\033[0m\]"

这里的问题是,当 PuTTY 在 UTF-8 模式下运行时,它目前不支持 ISO 2022 备用字符集序列。PuTTY 有一个愿望清单条目为此,以及解释为什么混合 UTF-8 和 ISO 2022 是不可取的。


正如评论中所说:请注意,旧版本的 Consolas 没有方框绘制字符。您必须从 Windows 8 获取 Consolas。

相关内容