首页 > 解决方案 > PS1:如何从子外壳中执行的函数中回显颜色代码?

问题描述

我以前从未真正接触过 bash,所以我的问题的解决方案可能很明显,但我无法理解它。我想将我的 PS1 设置为具有某些颜色的某些值。它工作正常,直到我从子外壳中回显一个颜色代码,然后它就搞砸了。

例如:

some_color='\033[01;38;5;196m'
PS1="\[$some_color\] $USER "

工作得很好。假设我有一个名为 get_color 的函数,它使用转义序列来回显颜色代码,我的提示符在用户名前面打印序列 \[\] 并且当我按几次向上箭头时,bash 历史记录被搞砸了。

some_color='\033[01;38;5;196m'
function get_color() {
  echo -n "\[$some_color\]" 
}
PS1="\$(get_color) $USER "

当我省略序列时,它会打印正确的输出,但 bash 历史仍然一团糟。当我使用 printf 和序列 \001 和 \002 而不是 \[ 和 \] 它工作得很好。为什么它不适用于回声?

some_color='\033[01;38;5;196m'
function get_color() {
  printf \001$some_color\002" 
}
PS1="\$(get_color) $USER "

标签: bashpromptps1

解决方案


推荐阅读