我正在开发一个动态 bash 提示符,我想在 PS1 中报告本地文件系统上启用了哪个版本的配置文件。这是我想做的一个人为的例子,经过简化。出错的地方:包装不良和/或出现转义括号。谁能发现我做错了什么吗?
如果设计的配置与“v2”匹配,我希望在 PS1 中看到该版本为黄色。如果是“v1”,则提示符为绿色。设置:
$ grep FOOVER foo-*.conf
foo-v1.conf:# FOOVER xyz-v1
foo-v2.conf:# FOOVER zet-v2
然后我将符号链接 foo.conf foo-v1.conf。我的 bashrc:
0 GREEN=$(tput setaf 034)
1 YELLOW=$(tput setaf 3)
2 BLUE=$(tput setaf 4)
3 CYAN=$(tput setaf 6)
4 BOLD=$(tput bold)
5 RESET=$(tput sgr0)
6 CONF=$HOME/foo.conf
7
8 function __get_foo_version () {
9 FOOVER=$(grep FOOVER $CONF | awk '{print $3}')
10 if [[ "$FOOVER" =~ v2$ ]]; then
11 style_foover="${BOLD}${YELLOW}$FOOVER"
12 #style_foover="\[${BOLD}${YELLOW}\]$FOOVER"
13 elif [[ "$FOOVER" =~ v1$ ]]; then
14 style_foover="${BOLD}${GREEN}$FOOVER"
15 #style_foover="\[${BOLD}${GREEN}\]$FOOVER"
16 fi
17 echo $style_foover
18 }
19
20 style_host="\[${RESET}${BLUE}\]"
21 style_path="\[${RESET}${CYAN}\]"
22 style_reset="\[${RESET}\]"
23
24 PS1='user@'
25 PS1+="${style_host}host"
26 PS1+="${style_reset} "
27 PS1+="\$(__get_foo_version) "
28 PS1+="${style_reset}"
29 PS1+="${style_path}\W"
30 PS1+="${style_reset} $ "
当我运行上面的代码时,我得到了这种行为,乍一看看起来不错:https://i.stack.imgur.com/7cGWf.jpg https://i.stack.imgur.com/7cGWf.jpg
但是当我向上箭头指向长命令时,会发生错误的换行:https://i.stack.imgur.com/6sdSq.jpg https://i.stack.imgur.com/6sdSq.jpg
当我禁用第 11、14 行并启用第 12、15 行时,我得到了用于处理 PS1 中显示的非打印字符的括号:
(没有足够的声誉点来发布超过 2 个链接:( imgur.com 斜线 nkXFDyJ)
user@host \[\]xyz-v1 ~ $
..在这种情况下我仍然得到不好的包装。
使用 \x01 (或 \001)和 \x02 (或 \002),然后使用 echo -e 评估它们:
function __get_foo_version () {
FOOVER=$(grep FOOVER $CONF | awk '{print $3}')
if [[ "$FOOVER" =~ v2$ ]]; then
#style_foover="${BOLD}${YELLOW}$FOOVER"
>>> style_foover="\x01${BOLD}${YELLOW}\x02$FOOVER"
elif [[ "$FOOVER" =~ v1$ ]]; then
#style_foover="${BOLD}${GREEN}$FOOVER"
>>> style_foover="\x01${BOLD}${GREEN}\x02$FOOVER"
fi
>>> echo -e "$style_foover"
}
关于为什么修复它的更完整的答案在这里:https://superuser.com/questions/301353/escape-non-printing-characters-in-a-function-for-a-bash-prompt https://superuser.com/questions/301353/escape-non-printing-characters-in-a-function-for-a-bash-prompt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)