这是我〜/ .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用户。 颜色始终正确显示,唯一的问题是显示提示的方式。
软件版本:
对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\\$ "
Post Scriptum(PS)的解决方案
tty控制台使用~/.bashrc_profile
而不是~/.bashrc
,因为(正如@chepner在下面的评论中所说)后者是由GUI终端模拟器提供的(因为它通常启动非登录交互式shell)。 tty console是一个交互式shell。
我的解决方案是将以下内容添加到~/.bash_profile
:
. ~/.bashrc
答案 0 :(得分:2)
\\[\\e]0; \\u@\\h: \\w\\a\\]
中有\\u@\\h:\\w\\$
和 PS1
。
问题是为什么你的终端没有显示第一组但你的控制台是。
我相信,答案是你在\[...\]
块中包含的第一个集合表明它是非打印并且不占用空间(这就是为什么你需要将颜色代码包含在{ {1}}以避免在代码不创建可见字符时提示短于终端预期。
这导致gnome-terminal从\[...\]
块的输出/内容中丢弃所有内容(甚至是可见字符)。
控制台可能只是打印可见字符(并忽略非打印字符)。 (我想知道这是否会导致大小错误估计。)
这里的解决方案是删除第一个(看似无意的)逃脱集。