And*_*Ray 46 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 \$ "
Run Code Online (Sandbox Code Playgroud)
这似乎使shell输出完全正确:
username\[\]@~/
在我的提示中显示了颜色代码周围的转义[和].如果我从它周围的颜色中删除转义码,但是bash换行会突然失败.
请注意,如果PS1="LIGHTGREEN - whatever - $RESET"
它可以工作,[和]不会被转义.但是,我想在一个函数中执行此操作,这似乎是个问题.
我找不到任何关于此的好文档.man echo
甚至没有列出-e选项.Bash似乎有很多无证的手工知识.
the*_*edk 52
我发现这个主题寻找答案如何通过\[ \]
从bash函数中转义来设置bash颜色.
实际上有解决方案.Bash允许在PS1
每次呈现提示时生成提示.
set_bash_prompt(){
PS1="\u@\h $(call_your_function) $>"
}
PROMPT_COMMAND=set_bash_prompt
Run Code Online (Sandbox Code Playgroud)
这样,PS1将在每次显示提示时被解释,因此它将调用函数并正确呈现所有转义序列,包括\[ \]
对于计算提示长度很重要(例如,使命令历史正常工作).
希望这会帮助某人,因为我花了半天时间来解决这个问题.
Mau*_*ayo 26
使用\001
替代\[
和\002
取代\]
,并知道使用的后果,PROMPT_COMMAND
因为该方法将重置提示每一次(也可以是你想要的东西,).
这里解释了bash提示回显函数内部颜色的解决方案:
在
\[
\]
当你将PS1,如果你把它们打印运行时显示的提示这是行不通的一个函数里只有特殊.在这种情况下,您需要使用字节\001
和\002
庆典专用的
\[
和\]
其实都是翻译成\001
和\002
在接受的aswer中建议PS1
的函数内部设置PROMPT_COMMAND
重置PS1
每次都不允许其他脚本轻松修改你的promtp(例如Python virtualnenv activate.sh):
$ echo $PS1
<your PS1>
$ PS1="(TEST)$PS1"
$ echo $PS1
<(TEST) is not prepended to PS1 if you are using PROMPT_COMMAND as it is reset>
Run Code Online (Sandbox Code Playgroud)
\[
并且\]
必须直接使用$PS*
,而不是仅通过它们输出echo
.
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\] \$ "
Run Code Online (Sandbox Code Playgroud)