我写了以下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;
答案 0 :(得分:2)
您需要export
newPWD。仅仅因为你echo
它并不意味着它在环境中。它表示它在shell和/或环境中的设置。要知道环境中是否有某些东西我会使用:
env | grep '^newPWD'
我不确定,但我不认为像这样使用newPWD
会起作用,因为newPWD
每次更改像PWD
这样的目录时都不会重置。因此,您最终可能需要更改PS1
设置,以便每次调用prompt_command
功能。
从您的评论看起来我对newPWD
的猜测是正确的。因此,您需要做的是将prompt_command
函数更改为echo
您想要的提示。然后将PS1
设置更改为
PS1="\`if [ \$? = 0 ];
then
echo -e '$PURPLE[\t] $LIGHT_CYAN\u$YELLOW@\h$WHITE: $(prompt_command) $GREEN $DEFAULT_COLOR';
else
echo -e '$PURPLE[\t] $LIGHT_CYAN\u$YELLOW@\h$WHITE: $(prompt_command) $RED $DEFAULT_COLOR';
fi; \`"
export PS1;
注意:我还从$
和$RED$
删除了跟踪$GREEN$
,因为我认为它们是拼写错误。不确定这是否正确