从PS1转义序列修复历史命令行损坏

时间:2018-11-22 00:30:03

标签: bash corruption ps1

我(相信)我遇到以下PS1不能正确使用转义序列的问题:

\ x1b [35mabc \ x1b [0m \ x1b [33mxyz \ x1b [0m \ x1b [34m \ w \ x1b [0m \ $

在我开始使用历史命令行之前,提示符看起来还不错,然后bash似乎迷失了该行的开始位置。我以为this stack overflow question会有所帮助,但我真的不知道我的转义序列丢失了。是我缺少右括号吗?另外,我有点困惑为什么我用\ x1b而不是\。

请帮助!

1 个答案:

答案 0 :(得分:0)

您完全缺少括号(包括打开和关闭)。尝试使用

\\[\x1b[35m\\]abc\\[\x1b[0m\\] \\[\x1b[33m\\]xyz\\[\x1b[0m\\] \\[\x1b[34m\\]\w\\[\x1b[0m\\]\$

也就是说,在提示中的每个转义序列周围放置\\[\\]

我个人的解决方案是使用两行提示(因此PS1中有一个\ n),其中第二行很短且没有转义符。因此,bash可以毫不费力地找出它的宽度:

PS1='\033[0;31m[\h${debian_chroot:+($debian_chroot)}] \033[0;32m[\u] \033[0;33m[\w$(__git_ps1 " (%s)")]\033[0;39m\n --> '