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

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

${debian_chroot:+($debian_chroot)}

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

3 ответа

Решение

Важной частью для ответа на этот вопрос является этот фрагмент из /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 &
Другие вопросы по тегам