bash 提示符和函数内的回显颜色

标签 bash function colors echo

我的 .bashrc 中有这个:

LIGHTGREEN="\[\033[1;32m\]"
LIGHTRED="\[\033[1;31m\]"
WHITE="\[\033[0;37m\]"
RESET="\[\033[0;00m\]"

function error_test {
    if [[ $? = "0" ]]; then
        echo -e "$LIGHTGREEN"
    else
        echo -e "$LIGHTRED"
    fi
}

PS1="\u\$(error_test)@\w$RESET \$ "

这似乎使 shell 输出准确:

用户名\[\]@~/

颜色代码周围的转义 [ 和 ] 出现在我的提示中。如果我从它工作的颜色周围删除转义码,但是 bash 换行会失败。

请注意,如果执行 PS1="LIGHTGREEN - whatever - $RESET" 它会起作用并且 [ 和 ] 不会被转义。但是,我想在函数内部执行此操作,这似乎是问题所在。

我找不到关于此的任何好的文档。 man echo 甚至没有列出 -e 选项。 Bash 似乎有很多未记录的、流传下来的知识。

最佳答案

我发现这个主题正在寻找如何通过从 bash 函数转义 \[\] 来设置 bash 颜色的答案。

其实是有解决办法的。 Bash 允许在每次呈现提示时生成 PS1 提示。

set_bash_prompt(){
    PS1="\u@\h $(call_your_function) $>"
}

PROMPT_COMMAND=set_bash_prompt

这样,每次显示提示时都会解释 PS1,因此它会调用函数并正确呈现所有转义序列,包括 \[\],这对于计算提示长度很重要(例如使命令历史记录正常工作)。

希望这对某人有所帮助,因为我花了半天时间来解决这个问题。

关于bash 提示符和函数内的回显颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6592077/

相关文章:

string - 打印没有最后一个换行符的 bash 变量

c++ - 如何使用 LD_LIBRARY_PATH 和链接使其真正正确?

linux - Bash 脚本 - 运行应用程序的当前或新实例

linux - 在 bash 中使用从字符串解析的数组

javascript - 在函数中查找所有全局引用?

c - 在函数中使用结构体作为参数

Java:更好的颜色选择算法

android - 颜色旁边的数字是什么意思?

c++ - 如何使用 C++ 中的函数在数组中输入用户值?

css list li 点一种颜色,文本另一种颜色(仅限CSS)