我认为我在const AssociatedModelMunitionDescription = app.get('sequelizeClient').models.munitionDescription;
中转义序列的方式有问题。实际上,我知道这就是问题所在。我的问题是我不能正确逃避什么?
PS1
诀窍是根据declare __host='\[\e[30;102m\] \h \[\e[0m\]';
declare __dir='\[\e[1;97;44m\] \w \[\e[22m\]';
declare __arrow='\[\e[1m\]▸ \[\e[0m\]';
function __git_status() {
local info;
info=$(__git_info);
[[ $? -eq 0 ]] && printf "\e[30;43m%s" "$info";
}
export PS1="$__host$__dir"'$(__git_status)'"$__arrow ";
或__dir
之前的箭头为箭头着色。像这样:
答案 0 :(得分:1)
printf
中的转义代码缺少\[
... \]
包装器。
从切切上讲,我还将排除与$?
和function
关键字的无用显式比较。
__git_status() {
local info
info=$(__git_info) &&
printf '\\[\e[30;43m\\]%s' "$info"
}
还请注意在格式字符串和双反斜杠周围切换为单引号(有关详细信息,请参见注释;感谢Charles Duffy的指导)。
Shell脚本在语句之间需要 分号或换行符,您不需要两者。
答案 1 :(得分:0)
感谢您的要旨。看来您问题的答案是printf
不想知道\[ \]
在非打印字符上的转义符。
__git_status() {
local info
info=$(__git_info) &&
printf '\e[30;43m%s' "$info"
}
对于您设置的PS1来说,对我来说非常完美,并且在确定提示时长方面不会出现问题。我唯一的问题是CentOS不知道如何在终端=(
中打印⑂
答案 2 :(得分:0)
解决方案是更改:
info=$(__git_info) && printf '\e[30;43m%s' "$info"
到
info=$(__git_info) && printf '\1\e[30;43m\2%s' "$info"
这是因为在执行__git_status函数之前,bash在内部用ASCII 1和2替换了提示特殊字符[和]。