O que "${debian_chroot:+($debian_chroot)}" faz no prompt do meu terminal?

O que "${debian_chroot:+($debian_chroot)}" faz no prompt do meu terminal?

Na definição do prompt do terminal em meu .bashrcarquivo, entre outras coisas, tenho este trecho de código:

${debian_chroot:+($debian_chroot)}

O que isso faz e eu preciso disso?

Responder1

A parte importante para responder a esta pergunta é este trecho de /etc/bash.bashrc:

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

Isso significa que se a variável $debian_chrootestiver vazia e o arquivo /etc/debian_chrootexistir e for legível, a variável será definida como o conteúdo do arquivo.

Agora, para que serve isso? O arquivo /etc/debian_chrooté quando você tem um sistema Debian com chroot dentro de outro sistema Debian (o Ubuntu é baseado no Debian). Então isso é para uma melhor visão geral. Para distinguir se você está no chroot ou não.

Quando você tem um chroot de outro sistema, por exemplo, /srv/nfs4/netboot/você pode definir um nome para esse chroot /srv/nfs4/netboot/etc/debian_chroot(no meu caso é uma unidade de netboot nfs4 pxe):

user@host:~# echo "netboot" >/srv/nfs4/netboot/etc/debian_chroot

E então quando você faz chroot dentro:

chroot /srv/nfs4/netboot/

Seu prompt é assim:

(netboot)user@host:~#

Responder2

Geralmente, ${var:+value}significa:

if $var is defined and not null; then use 'value'; else do nothing

A debian_chrootvariável é definida no /etc/bash.bashrcarquivo. Leva o conteúdo do /etc/debian_chrootarquivo se este arquivo existir e for legível. Por padrão, este arquivo não existe.

Para mais detalhes, consulte:

Agora, para entender melhor o que exatamente está acontecendo ali, faça o seguinte no terminal:

radu@Radu:~$PS1='${var:+($var)}\u@\h:\w\$ '
radu@Radu:~$var="teste"
                  ----
                   |
  ------------------
  |
  V
(teste)radu@Radu:~$var=""
radu@Radu:~$var="e assim por diante"
(e assim por diante)radu@Radu:~$

Responder3

Se a variável de ambiente $debian_chrootexistir e não estiver vazia, ${debian_chroot:+($debian_chroot)}ela será substituída por ($debian_chroot)(esse é o valor de $debian_chrootcom parênteses ao seu redor).

$debian_chrooté definido /etc/bash.bashrcno conteúdo /etc/debian_chrootse esse arquivo existir (não existe por padrão) e $debian_chrootainda não possui um valor.

${debian_chroot:+($debian_chroot)}geralmente é usado para definir seu prompt do Bash, por exemplo

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Como o nome sugere, você pode usar esta variável para indicar em qual chroot você está, colocando-a etc/debian_chrootnas pastas raiz do chroot.

Se você não sabe o que é um chroot, é provável que não precise dele ;-) Mas você ainda pode abusar dele para incluir outras informações no prompt do Bash

Por padrão, ele não faz nada.

Responder4

Se você nunca precisar usar debian_chroot, é um lugar útil para colocar a hora em que o prompt de comando foi exibido usando:

export PROMPT_COMMAND='debian_chroot=$(date +%r)'

Digite isto em seu terminal e observe o prompt de comando mudar com o tempo:

rick@alien:~$ export PROMPT_COMMAND='debian_chroot=$(date +%r)'

(09:14:59 PM)rick@alien:~$ 

Depois que o tempo for definido uma vez, para obter um relógio em execução que atualiza a cada segundo, use:

while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &

informação relacionada