这是我的 ~/.bashrc 的一部分:
prompt(){
local EXIT="$?" # return code
PS1=""
local red="\[\033[0;31m\]" # text colour
local purple="\[\033[0;35m\]" # text colour
local normal="\[\033[0m\]" # text colour
if [ $EXIT == 0 ]; then # $EXIT colour based upon its value
local return="${normal}${?}"
else
local return="${red}${?}${normal}"
fi
PS1+="${normal}[${purple}\\D{%-l:%M%P}${normal}]${return} \\[\\e]0; \
\\u@\\h: \\w\\a\\]${debian_chroot:+($debian_chroot)}\\u@\\h:\\w\\$ "
}
export PROMPT_COMMAND=prompt
这是我在 gnome-terminal 中的提示 shell(正确显示):
[5:01pm]0 user@host:~$
但是当我切换到 tty 控制台时,在我登录后,会显示:
[5:05pm]0 ;user@host: ~user@host:~$
这发生在普通用户身上,但也发生在同一操作系统上同一笔记本上的 root 用户身上。颜色总是正确显示,唯一的问题是提示的显示方式。
软件版本:
- GNU bash,版本 4.3.11(1)-release (i686-pc-linux-gnu),
- Ubuntu 侏儒 14.04。
PS1值的一些解释:
[5:01pm] # current time
0 # return/exit code of the last command (0 can be any number;
# if return code has a non-zero value, it turns red)
PS – 目前在 tty 控制台中,我需要source ~/.bashrc
能够使用我的所有设置。(1) tty 控制台自己的.bashrc 在哪里?(2)或者如何设置它来使用~/.bashrc
?
提示不同行为的解决方案
正如公认的答案所暗示的那样,在 PS1 变量中,有一部分应该省略,因此我只是将函数的最后一行更改为
PS1+="${normal}[${purple}\\D{%-l:%M%P}${normal}]${return} \
${debian_chroot:+($debian_chroot)}\\u@\\h:\\w\\$ "
后脚本(PS)的解决方案
tty 控制台使用~/.bashrc_profile
而不是~/.bashrc
,因为(正如@chepner 在下面的评论中所说)后者是由 GUI 终端仿真器提供的(因为它通常启动非登录交互式 shell)。tty 控制台是一个交互式外壳。
我的解决方案是将以下内容添加到~/.bash_profile
:
. ~/.bashrc