Правильно ли .bashrc устанавливает заголовок графического терминала?

Из значения по умолчанию .bashrc:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac 

Результат проверяется выдачей команды эхо:

$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

Похоже, что ${debian_chroot:+($debian_chroot)} условный вставка будет выполнена для командной строки, но не для названия терминала. Похоже, автор .bashrc предполагал, что он отображается в обоих местах слева от user@host, но на самом деле он не попал в оба места. Оценка debian_chroot произошла при определении PS1, но в то время она не предназначалась для оценки, скорее она должна была быть оценена во время запроса. Корень проблемы заключается в том, что при построении строк "" цитирования оценок и '' цитирования нет. Оценка была ранней, потому что вся вещь, заключенная в \[ \], была предназначена для названия. Правильно ли интерпретация?

1
задан 30 December 2015 в 04:29

1 ответ

${debian_chroot:+($debian_chroot)} вставка зависит от наличия переменной $debian_chroot или /etc/debian_chroot.

Вот простой пример. На скриншоте ниже я подключен через ssh к моей малиновой Pi с Ubuntu Snappy на нем, у которого есть $debian_chroot переменная, установленная (по умолчанию), в то время как у Ubuntu у моего ноутбука нет. Вы можете увидеть итоговое приглашение на вкладках, и в обоих случаях переменная для $TERM равна xterm

Теперь, если переменная $TERM была чем-то другим, 't изменить название терминала GUI. Это может быть подключение к сеансу screen, например, где переменная $TERM - screen.

1
ответ дан 23 May 2018 в 14:42
  • 1
    Но название вашего терминала уже не является значением по умолчанию. Ваше название не является user @ host: directory, хотя ваши вкладки есть. – H2ONaCl 30 December 2015 в 04:25
  • 2
    @ H2ONaCl Исходный xterm не имел вкладок, поэтому заголовок окна xterm будет user @ host: directory. Теперь у нас есть терминальные эмуляторы с вкладками, и это зависит от индивидуальной программы, чтобы установить это поведение. Я использую сакуру, которая дает такое поведение. gnome-terminal изменяет заголовок окна на любой текущий заголовок вкладки. Я уверен, что другие терминалы ведут себя иначе – Sergiy Kolodyazhnyy 30 December 2015 в 04:30
  • 3
    Если я ошибаюсь, то почему у моего PS1 есть только одна условная вставка? – H2ONaCl 30 December 2015 в 04:32
  • 4
    @ H2ONaCl вы имеете в виду только одну условную вставку с частью case "$TERM" in? – Sergiy Kolodyazhnyy 30 December 2015 в 04:34
  • 5
    @ H2ONaCl вы знаете, как получить доступ к чату? Давай пойдем туда – Sergiy Kolodyazhnyy 30 December 2015 в 04:35

Другие вопросы по тегам:

Похожие вопросы: