В определении моего терминала в файле .bashrc
, среди прочего, у меня есть этот фрагмент кода:
${debian_chroot:+($debian_chroot)}
Что это делает, и мне это нужно?
В определении моего терминала в файле .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
- это когда у вас есть chrooted debian system внутри другой debian-системы (ubuntu основан на debian). Так что это лучший обзор. Чтобы отличить, находитесь ли вы в chroot или нет.
Если у вас есть chroot другой системы, например, в /srv/nfs4/netboot/
, вы можете установить имя для этого chroot в /srv/nfs4/netboot/etc/debian_chroot
(в моем случае это nfs4 pxe netboot):
[email protected]:~# echo "netboot" >/srv/nfs4/netboot/etc/debian_chroot
И затем, когда вы закроете внутри:
chroot /srv/nfs4/netboot/
Ваше приглашение выглядит следующим образом:
(netboot)[email protected]:~#
Как правило, ${var:+value}
означает:
if $var is defined; then use 'value'; else do nothing
Переменная debian_chroot
определена в файле /etc/bash.bashrc
. Он принимает содержимое файла /etc/debian_chroot
, если этот файл существует и доступен для чтения. По умолчанию этот файл не существует.
Подробнее см.
Теперь, чтобы лучше понять, что именно там происходит, выполните следующие операции в терминале:
[email protected]:~$
PS1='${var:+($var)}\[email protected]\h:\w$ '
[email protected]:~$ var="test"
----
|
------------------
|
V
(test)[email protected]:~$ var=""
[email protected]:~$ var="and so on"
(and so on)[email protected]:~$
Если переменная environment $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)}\[email protected]\h:\w$ '
Как видно из названия, вы можете использовать эту переменную, чтобы указать, какой chroot вы используете, разместив etc/debian_chroot
в корневых папках chroot. Р>
Если вы не знаете, что у chroot есть шансы, вам это не нужно ;-) Но вы все равно можете злоупотреблять им, чтобы включить в свою подсказку Bash другую информацию.
По умолчанию он ничего не делает.