Правильно ли.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:
$ 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, но оно не предназначалось для оценки в то время, скорее оно должно было оцениваться во время запроса. Корень проблемы в том, что при построении строк "" цитирование оценивает и '' цитирования нет. Оценка была ранней, потому что все это заключено в \[\] был предназначен для названия. Правильно ли истолковано?
2 ответа
Я бы сказал, что все это не имеет значения. debian_chroot установлен в/etc/bash.bashrc, Справедливо поспорить, что в обычном порядке, если переменная была установлена, была запущена новая оболочка - зачем /etc/bash.bashrc быть источником в противном случае? И в этом случае, ~/.bashrc будет также получены. Итак, либо переменная устанавливается, когда PS1 устанавливается и изменяется в строках, которые вы показываете, или нет, и не будет. Эффект тот же.
Я могу только догадываться, почему оригинальный разработчик использовал одинарные кавычки при настройке PS1 на первом месте. Предположительно, разработчик научился осторожности и использует "" только при необходимости, что происходит при изменении PS1,
Обратите внимание, что :+ просто означает ничего не делать, если переменная не установлена.
${debian_chroot:+($debian_chroot)} вставка зависит от наличия $debian_chroot переменная или /etc/debian_chroot файл.
Вот простой пример. На скриншоте ниже я подключен через ssh к Raspberry Pi с Ubuntu Snappy, на котором есть $debian_chroot переменная установлена (по умолчанию), в то время как Ubuntu моего ноутбука нет. Вы можете увидеть полученную подсказку на вкладках, и в обоих случаях переменную для $TERM является xterm
Теперь, если переменная $TERM было что-то еще, это не изменило бы название терминала GUI. Это может быть связано с screen сеанс, например, где переменная $TERM является screen,
