bash提示壳在端子和TTY控制台上显示出不同的显示



这是我的〜/.bashrc的一部分:

prompt(){
    local EXIT="$?"  # return code
    PS1=""
    local red="[33[0;31m]"  # text colour
    local purple="[33[0;35m]"  # text colour
    local normal="[33[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中的提示外壳(正确显示):

[5:01pm]0 user@host:~$

但是,当我登录后,当我切换到TTY控制台时,将显示:

[5:05pm]0 ;user@host: ~user@host:~$

这与普通用户一起发生,但同一操作系统上的同一笔记本上也发生了root。颜色总是正确显示,唯一的问题是显示提示的方式。


SOFWARE版本:

  • gnu bash,版本4.3.11(1)-Release(i686-pc-linux-gnu),
  • Ubuntu Gnome 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\$ "

scriptum(ps)

的解决方案

TTY控制台使用~/.bashrc_profile代替~/.bashrc,因为(如@Chepner在下面的评论中所述)后者由GUI终端模拟器采购(因为它通常启动非login Interactive shell)。TTY控制台是一个交互式外壳。

我的解决方案是将以下内容添加到~/.bash_profile

. ~/.bashrc

您的\[\e]0; \u@\h: \w\a\] \u@\h:\w\$ in PS1

问题是,为什么您的终端不显示第一组,而是您的控制台。

我相信的答案是,您将第一套包裹在[...]块中,这表明它是不打印的,没有占用空间(这就是为什么您需要将颜色代码包装在[...]中以避免提示当代码不会创建可见字符时,比终端期望的短。

这导致gnome末端从[...]块的输出/内容中丢弃所有内容(甚至可见字符)。

控制台,大概是在打印可见字符(而忽略非打印字符)。(我想知道这是否导致较大尺寸的错误计算。)

这里的解决方案是首先删除(看似无意的)逃生集。

相关内容

  • 没有找到相关文章