Правильно ли.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
,