^[ 在 shell 提示符下转义
^[ escape in shell prompt
问题
我正在用 Rust 编写一个 application(为了好玩),它允许我使用 DSL 将 git 存储库统计信息漂亮地打印到我的 bash shell 提示符中.
但是,我有一个 issue with the library 用于在终端中格式化文本。它在输出中使用了我以前从未见过的转义符 ^[
。它似乎影响了换行,使得文本在终端结束之前换行到同一行。
您可以在这里看到 gnome shell and in hyper 中的演示。
复制
创建一个包含以下内容的文件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
它是文字转义字符 (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\]
问题
我正在用 Rust 编写一个 application(为了好玩),它允许我使用 DSL 将 git 存储库统计信息漂亮地打印到我的 bash shell 提示符中.
但是,我有一个 issue with the library 用于在终端中格式化文本。它在输出中使用了我以前从未见过的转义符 ^[
。它似乎影响了换行,使得文本在终端结束之前换行到同一行。
您可以在这里看到 gnome shell and in hyper 中的演示。
复制
创建一个包含以下内容的文件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
它是文字转义字符 (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\]