2015-05-05 6 views
2

Это часть моего ~/.bashrc:Баш приглашение оболочки отображаться по-разному в консоли терминала и Tty

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; \ 
    \\[email protected]\\h: \\w\\a\\]${debian_chroot:+($debian_chroot)}\\[email protected]\\h:\\w\\$ " 
} 

export PROMPT_COMMAND=prompt 

Это мое приглашение оболочки в гном-терминала (корректно отображается):

[5:01pm]0 [email protected]:~$ 

Но когда я переключаюсь на TTY консоли, после того, как я вошел в систему, отображается следующим образом:

[5:05pm]0 ;[email protected]: [email protected]:~$ 

Это происходит с регулярными но и с корнем на одном ноутбуке в той же операционной системе. Цвета всегда отображаются правильно, единственная проблема связана с отображением подсказки.


Sofware версии:

  • GNU Баш, версия 4.3.11 (1) -release (i686-ПК-Linux-гну),
  • 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) Где находится собственный .bashrc консоли tty? (2) Или как настроить его для использования ~/.bashrc?


Решения различного поведения оперативного

Как подсказывает принятый ответ, в переменной PS1, была частью, которая должна быть опущена, таким образом, я только изменил последнюю строку функции

PS1+="${normal}[${purple}\\D{%-l:%M%P}${normal}]${return} \ 
${debian_chroot:+($debian_chroot)}\\[email protected]\\h:\\w\\$ " 

Решение Постскриптум (PS)

tty консолей использует ~/.bashrc_profile вместо ~/.bashrc, потому что (как указано в комментарии в комментарии @chepner) последний из них получен эмулятором терминала GUI (обычно он запускает интерактивную оболочку без входа в систему). tty console - интерактивная оболочка.

Мое решение добавить следующее ~/.bash_profile:

. ~/.bashrc 
+1

'.bashrc' специфичен для входа пользователя в систему, а не для типа терминала. – chepner

+0

Так что я тоже подумал, но даже если я вхожу в систему с теми же учетными записями в модуле графического интерфейса (и, следовательно, в gnome-terminal), и на консоли tty, все еще в tty-консоли, если я хочу использовать '~/.bashrc ', сначала мне нужно ввести команду' source ~/.bashrc'. – tukusejssirs

+2

Когда вы входите в консоль, программа 'login' запускает входную оболочку, в которой хранятся' .bash_profile', а не '.bashrc'. Эмулятор терминала GUI обычно запускает интерактивную оболочку, не входящую в систему, в которой источники '.bashrc', а не' .bash_profile', так как ваш графический интерфейс предположительно запускался из оболочки входа. Это довольно распространенная практика, заключающаяся в том, чтобы включать 'source ~/.bashrc' из вашего' .bash_profile', так что '.bashrc' отправляется для всех интерактивных оболочек, независимо от того, являются ли они оболочками входа. – chepner

ответ

2

\\[\\e]0; \\[email protected]\\h: \\w\\a\\] Вы и\\[email protected]\\h:\\w\\$ в PS1.

Вопрос в том, почему ваш терминал не показывает этот первый набор, но ваша консоль.

Ответ, я считаю, заключается в том, что у вас есть этот первый набор, заключенный в блок \[...\], который указывает, что он не печатается и не занимает места (поэтому вам необходимо заключить цветовые коды в \[...\], чтобы избежать оперативный быть короче, чем терминал ожидает, когда коды не создают видимые символы.

Это вызывает гном-терминал, чтобы сбросить все (даже видимые символы) с выхода/содержимое \[...\] блока.

в консоль, по-видимому, просто печатает видимые символы (и игнорирует непечатаемые символы). (Интересно, вызывает ли это запрос ize просчеты или нет.)

Решение здесь заключается в том, чтобы удалить этот первый (казалось бы, непреднамеренный) набор экранов.

 Смежные вопросы

  • Нет связанных вопросов^_^