Что означает & ldquo; $ {debian_chroot: + ($ debian_chroot)} & rdquo; делать в моем терминале подсказку?

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

${debian_chroot:+($debian_chroot)}

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

87
задан 8 November 2013 в 20:05

4 ответа

Обычно ${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"
                  ----
                   |
  ------------------
  |
  V
(test)radu@Radu:~$ var=""
radu@Radu:~$ var="and so on"
(and so on)radu@Radu:~$
0
ответ дан 8 November 2013 в 20:05

Важной частью ответа на этот вопрос является фрагмент из /etc/bash.bashrc:

if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

Это означает, что если переменная $debian_chroot пуста, а файл /etc/debian_chroot существует и доступен для чтения, переменная установить содержимое файла.

1112 Теперь, для чего это нужно? Файл /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 /srv/nfs4/netboot/

Ваша подсказка выглядит так:

(netboot)user@host:~#
0
ответ дан 8 November 2013 в 20:05

Если переменная окружения $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

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

0
ответ дан 8 November 2013 в 20:05

Если Вы никогда не должны использовать 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 &
0
ответ дан 22 November 2019 в 23:10

Другие вопросы по тегам:

Похожие вопросы: