我的 .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/