В определении приглашения терминала в моем .bashrc
файле, среди прочего, есть следующий фрагмент кода:
${debian_chroot:+($debian_chroot)}
Что это дает и нужно ли мне это?
решение1
Важная часть для ответа на этот вопрос — этот фрагмент из /etc/bash.bashrc
:
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
Это означает, что если переменная $debian_chroot
пуста, а файл /etc/debian_chroot
существует и доступен для чтения, то переменной присваивается содержимое файла.
Теперь, для чего это? Файл /etc/debian_chroot
нужен, когда у вас chroot-система Debian внутри другой системы Debian (Ubuntu основан на Debian). Так что это для лучшего обзора. Чтобы отличить, находитесь ли вы в chroot-системе или нет.
Например, если у вас есть chroot другой системы, /srv/nfs4/netboot/
вы можете задать имя для этого chroot /srv/nfs4/netboot/etc/debian_chroot
(в моем случае это загрузочный диск nfs4 pxe):
user@host:~# echo "netboot" >/srv/nfs4/netboot/etc/debian_chroot
А затем, когда вы делаете chroot внутри:
chroot /srv/nfs4/netboot/
Ваша подсказка выглядит так:
(netboot)user@host:~#
решение2
В общем случае ${var:+value}
это означает:
if $var is defined and not null; then use 'value'; else do nothing
Переменная debian_chroot
определена в /etc/bash.bashrc
файле. Она принимает содержимое /etc/debian_chroot
файла, если этот файл существует и доступен для чтения. По умолчанию этот файл не существует.
Более подробную информацию см. здесь:
Теперь, чтобы лучше понять, что именно там происходит, сделайте в терминале следующее:
radu@Radu:~$
PS1='${var:+($var)}\u@\h:\w\$ '
radu@Radu:~$вар="тест"
----
|
------------------
|
В
(тест)radu@Radu:~$вар=""
radu@Radu:~$var="и так далее"
(и так далее)radu@Radu:~$
решение3
Если переменная окружения $debian_chroot
существует и не является пустой, ${debian_chroot:+($debian_chroot)}
она заменяется на ($debian_chroot)
(то есть на значение $debian_chroot
в скобках).
$debian_chroot
устанавливается /etc/bash.bashrc
в содержимое, /etc/debian_chroot
если этот файл существует (по умолчанию его нет) и $debian_chroot
пока не имеет значения.
${debian_chroot:+($debian_chroot)}
обычно используется для определения приглашения Bash, например
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Как следует из названия, вы можете использовать эту переменную для указания того, в какой среде chroot вы находитесь, поместив ее etc/debian_chroot
в корневые папки chroot.
Если вы не знаете, что такое chroot, скорее всего, он вам не нужен ;-) Но вы все равно можете злоупотребить им, чтобы включить какую-то другую информацию в приглашение Bash.
По умолчанию он ничего не делает.
решение4
Если вам никогда не понадобится использовать эту функцию debian_chroot
, то это удобное место, где можно указать время отображения командной строки, используя:
export PROMPT_COMMAND='debian_chroot=$(date +%r)'
Введите это в терминале и наблюдайте, как командная строка меняется со временем:
rick@alien:~$ export PROMPT_COMMAND='debian_chroot=$(date +%r)'
(09:14:59 PM)rick@alien:~$
После того, как время установлено один раз, чтобы получить работающие часы, которые обновляются каждую секунду, используйте:
while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &