Shell 提示:\W 显示为 '\w',让人疑惑

Shell 提示:\W 显示为 '\w',让人疑惑

TL;DR:

PS1 并不像它应该的那样。 PS1="\W"显示为\w█闪烁的光标块。只有在目录更改后才会显示文件夹名称。操作系统是 Debian 9.9 Stretch。我不太确定我在哪里犯了错误,请其他人看看并给出他们的专业意见。

以下是我的.bashrc

RED='\[\033[31m\]'
BOLD_RED='\[\033[1;31m\]'
YELLOW='\[\033[33m\]'
GREEN='\[\033[32m\]'
BLUE='\[\033[01;34m\]'
BOLD_BLUISH='\[\033[01;32m\]'
NORMAL='\[\033[00m\]'

USR='\u'
TIME='\t'
PWD='\w'
DIR='\W'
RIGHTS='\$'
RESET='\[$(tput sgr0)\]'

if [ $(id -u) -eq 0 ]; then
    PS1="$NORMAL\t·$BOLD_RED\u@\h$NORMAL·$GREEN$DIR·$NORMAL\$ $RESET"
else
    PS1="$GREEN\t$NORMAL·$BOLD_BLUISH\u@\h$NORMAL·$BLUE$DIR$NORMAL·\$ $RESET"
fi

答案1

这是因为PWD是一个 shell 变量。来自man 1 bash

PWD命令设置的当前工作目录cd

当前工作目录更改时,Bash 会更新此变量。似乎如果PS1使用\W\w,提示符将从变量中读取,因此如果您这样做(或刚刚这样做),PWD='\w'则提示符将显示文字\w。尝试使用其他值(例如PWD="Oh boy, this string should not appear in my prompt!"),您的提示符将反映这一点。

cd当shell 更新变量后,提示符的行为就PS1="\W"应该如此。

通用解决方案:lowercase对变量使用名称

相关内容