【发布时间】:2018-09-13 21:08:44
【问题描述】:
将 ANSI 颜色代码放入 PS1 时,需要用 \[\] 包围它们,否则提示可能会混淆行的可编辑部分从哪里开始。但是,当子命令 ($()) 打印颜色时,\[\] 转义总是按字面意思写入提示符……而且在我的历史记录中,如果命令足够长,提示符就会混淆。
这是一个例子:
ps1test() {
ps1sub() {
printf '\[\033[32m\]Hello!\[\033[0m\]'
}
PS1='$(ps1sub) \$ '
}
预期:
$ ps1test
Hello! $
实际(由 Git for Windows 安装的bash):
$ ps1test
\[\]Hello!\[\] $
如何让我的 shell 解释子命令中的 \[\] 转义?
【问题讨论】:
-
与其使用原始颜色代码,不如使用
tput更干净。 -
更干净的是,但是对
tput的调用过多会显着减慢shell。至少在 Windows 上。但无论如何,问题中的颜色代码只是一个例子。