В моем терминальном определении подсказки в моем .bashrc
файле, среди прочего, у меня есть этот фрагмент кода:
${debian_chroot:+($debian_chroot)}
Что это делает, и мне это нужно?
Важная часть, чтобы ответить на этот вопрос, это фрагмент из /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
- это когда у вас есть хромированная система 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:~#
Как правило, ${var:+value}
означает:
if $var is defined; then use 'value'; else do nothing
debian_chroot
Переменная определена в /etc/bash.bashrc
файле. Он принимает содержимое /etc/debian_chroot
файла, если этот файл существует и доступен для чтения. По умолчанию этот файл не существует.
Для более подробной информации смотрите:
Теперь, чтобы лучше понять, что именно там происходит, выполните следующие действия в терминале:
radu@Radu:~$
PS1 = '$ {var: + ($ var)} \ u @ \ h: \ w \ $' radu @ Radu : ~ $ var = "test" ---- | ------------------ |
В
( тест ) radu @ Radu : ~ $ var = "" radu @ Radu : ~ $ var = "и т. д." ( и т. д. ) radu @ Radu : ~ $
Если переменная окружения $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.
По умолчанию это ничего не делает.
Если вам никогда не понадобится использовать 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 &