我编写了以下 bash 配置文件设置文件:
BLACK="\[\033[0;30m\]"
DARK_GRAY="\[\033[1;30m\]"
LIGHT_GRAY="\[\033[0;37m\]"
BLUE="\[\033[0;34m\]"
LIGHT_BLUE="\[\033[1;34m\]"
GREEN="\[\033[0;32m\]"
LIGHT_GREEN="\[\033[1;32m\]"
CYAN="\[\033[0;36m\]"
LIGHT_CYAN="\[\033[1;36m\]"
RED="\[\033[0;31m\]"
LIGHT_RED="\[\033[1;31m\]"
PURPLE="\[\033[0;35m\]"
LIGHT_PURPLE="\[\033[1;35m\]"
BROWN="\[\033[0;33m\]"
YELLOW="\[\033[1;33m\]"
WHITE="\[\033[1;37m\]"
DEFAULT_COLOR="\[\033[00m\]"
function prompt_command {
# How many characters of the $PWD should be kept
local pwd_length=23
if [ $(echo -n $PWD | wc -c | tr -d " ") -gt $pwd_length ]
then
newPWD="$(echo -n $PWD | sed -e "s/.*\(.\{$pwd_length\}\)/\1/")"
else
newPWD="$(echo -n $PWD)"
fi
}
PROMPT_COMMAND=prompt_command;
PS1="\`if [ \$? = 0 ];
then
echo -e '$PURPLE[\t] $LIGHT_CYAN\u$YELLOW@\h$WHITE: $newPWD $GREEN$ $DEFAULT_COLOR';
else
echo -e '$PURPLE[\t] $LIGHT_CYAN\u$YELLOW@\h$WHITE: $newPWD $RED$ $DEFAULT_COLOR';
fi; \`"
export PS1;
由于某种原因,获取 newPWD 不起作用。它存在于环境中(我可以使用 echo 打印它),但是它没有添加到命令行提示符中。总是添加一个空字符串。所以一个示例输出是:
[11:54:09] ber@szak: $
有什么想法为什么不呢?
PS。这是我的解决方案:
BLACK="\[\033[0;30m\]"
DARK_GRAY="\[\033[1;30m\]"
LIGHT_GRAY="\[\033[0;37m\]"
BLUE="\[\033[0;34m\]"
LIGHT_BLUE="\[\033[1;34m\]"
GREEN="\[\033[0;32m\]"
LIGHT_GREEN="\[\033[1;32m\]"
CYAN="\[\033[0;36m\]"
LIGHT_CYAN="\[\033[1;36m\]"
RED="\[\033[0;31m\]"
LIGHT_RED="\[\033[1;31m\]"
PURPLE="\[\033[0;35m\]"
LIGHT_PURPLE="\[\033[1;35m\]"
BROWN="\[\033[0;33m\]"
YELLOW="\[\033[1;33m\]"
WHITE="\[\033[1;37m\]"
DEFAULT_COLOR="\[\033[00m\]"
export MYPATHPS='$(
echo -n "${PWD/#$HOME/~}" |
awk -F "/" '"'"'{
if (length() > 14) {
if (NF>4) print "/" "/.../" $(NF-1) "/" $NF;
else if (NF>3) print "/" "/.../" $NF;
else print "/.../" $NF;
}
else print ;
}'"'"'
)';
PS1="$PURPLE[\t] $LIGHT_CYAN\u$YELLOW@\h \` if [ \$? = 0 ]
then
echo -en '$GREEN'
else
echo -en '$RED'
fi;
\` $MYPATHPS $ $DEFAULT_COLOR ";
export PS1;