我是 Bash 编程新手,我正在努力创建一个自定义 Bash 命令提示符。我的目标是创建一个提示,仅在登录名和主机名与我通常使用的不同时显示它们。当位于 Git 版本控制下的目录中时,我还希望将当前的 Git 分支附加到命令提示符。
我想将登录名和主机名部分设置为绿色,目录路径设置为蓝色,Git 分支部分设置为粉色,分隔符(: 和 $ 字符)设置为白色。然而,当先前执行的命令返回零以外的任何值时,我想将 $ 分隔符设置为红色。没有颜色的一般格式如下所示:
loginname@hostname:~/current/path:branchname$
唯一必需的部分是目录路径和 $ 字符。这是我为我编写的代码.bashrc file:
MYNAME="gwen"
MYHOST="gwen-laptop"
RED="\[\033[31m\]"
WHITE="\[\033[0m\]"
GREEN="\[\033[01;32m\]"
BLUE="\[\033[01;34m\]"
PINK="\[\033[01;35m\]"
DOLLAR="if [ \$? = 0 ]; then echo ${WHITE}\$; else echo ${RED}\$${NORMAL}; fi"
GITBRN='$(__git_ps1 "\033[0m:\033[01;35m%s")'
USERNM="if [ \u != ${MYNAME} ]; then whoami; fi;"
HOSTNM="if [ \h != ${MYHOST} ]; then echo -n @; hostname; fi;"
COLONM="if [ \u != ${MYNAME} ] || [ \h != ${MYHOST} ]; then echo -n :; fi;"
PS1="${GREEN}\`${USERNM}\`\`${HOSTNM}\`${WHITE}\`${COLONM}\`${BLUE}\w${GITBRN}\`${DOLLAR}\` "
这段代码满足了我的所有要求,除了它始终将 $ 字符保留为白色,并且不会在适当的时间将其着色为红色。 (我怀疑问题是DOLLAR中的“\$?”引用了之前执行的命令,但是DOLLAR是在构建PS1时最后执行的,所以之前的执行语句不再是PS1构建开始之前运行的命令;这是一些东西这是为了创建命令提示符而执行的。)我是不知道如何解决这个问题.
这段代码很丑陋并且需要重构。我试图将所有颜色代码移到它们自己的变量中,但是当我在 GITBRN 代码中使用这些颜色变量时,事情变得混乱,所以我最终在那里使用了文字颜色。
我花了一整天的时间试图让这段代码正常工作,但我想此时我无处可去。任何关于如何在适当的时间将美元符号变成红色的建议将非常感激。我也愿意接受有关重构代码以使其更清晰、更具可读性的建议。
附:我是 Ubuntu Linux (Lucid Lynx) 用户。