^ [在shell提示符中转义

时间:2018-02-13 18:59:50

标签: linux bash shell command-prompt

问题

我正在写一个application生锈(为了好玩),它允许我使用DSL将git存储库统计信息打印到我的bash shell提示符中。

但是,我正在使用issue library来设置终端中的文本格式。它在输出中使用了我以前见过的逃避^[。它似乎影响换行,使得文本在终端结束之前换行到同一行。

您可以在此处看到gnome shellhyper中的演示。

复制

使用以下内容创建文件shell.txt

^[[1;32m\u^[[0m^[[32m@\h^[[0m:^[[1;34m\w^[[0m

将提示命令设置为以下内容:

__set_prompt() {
    PS1="$(cat shell.txt)"
}
PROMPT_COMMAND=__set_prompt

问题

什么是^[逃脱?

是否有一个简单的解决方法让我的shell能够正确识别线宽?

bash --version 4.4.12(1)-release

1 个答案:

答案 0 :(得分:1)

它是文字转义字符(ASCII 0x1b)的表示。编写shell.txt的简单方法是

\e[1;32m\u\e[0m\e[32m@\h\e[0m:\e[1;34m\w\e[0m

要确保shell可以准确计算提示的大小,您需要将非打印字符包装在\[...\]中。

\[\e[1;32m\]\u\[\e[0m\e[32m\]@\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]