Что делает «$ {debian_chroot: + ($ debian_chroot)}» в моей подсказке терминала?

55

В определении моего терминала в файле .bashrc , среди прочего, у меня есть этот фрагмент кода:

${debian_chroot:+($debian_chroot)}

Что это делает, и мне это нужно?

    
задан fouric 08.11.2013 в 07:03
источник

3 ответа

58

Важной частью ответа на этот вопрос является этот фрагмент из /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]:~#
    
ответ дан chaos 08.11.2013 в 08:15
источник
31

Как правило, ${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]:~$
    
ответ дан Radu Rădeanu 08.11.2013 в 08:49
13

Если переменная 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 другую информацию.

По умолчанию он ничего не делает.

    
ответ дан Florian Diesch 08.11.2013 в 08:12