O que “$ {debian_chroot: + ($ debian_chroot)}” faz no meu terminal?

59

Na minha definição de prompt de terminal no meu arquivo .bashrc , entre outras coisas, eu tenho este trecho de código:

${debian_chroot:+($debian_chroot)}

O que isso faz, e eu preciso disso?

    
por fouric 08.11.2013 / 07:03

3 respostas

62

A parte importante para responder a essa pergunta é esse 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_chroot estiver vazia e o arquivo /etc/debian_chroot existir e for legível, a variável será definida para o conteúdo do arquivo.

Agora, o que é isso? O arquivo /etc/debian_chroot é quando você tem um sistema debian 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ê tiver um chroot de outro sistema, por exemplo, em /srv/nfs4/netboot/ , você pode definir um nome para este chroot em /srv/nfs4/netboot/etc/debian_chroot (no meu caso, é uma unidade de netboot nfs4 pxe):

[email protected]:~# echo "netboot" >/srv/nfs4/netboot/etc/debian_chroot

E quando você faz o chroot dentro:

chroot /srv/nfs4/netboot/

Seu prompt é assim:

(netboot)[email protected]:~#
    
por chaos 08.11.2013 / 08:15
34

Geralmente, ${var:+value} significa:

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

A variável debian_chroot é definida no arquivo /etc/bash.bashrc . Leva o conteúdo do arquivo /etc/debian_chroot se esse arquivo existir e for legível. Por padrão, esse arquivo não existe.

Para mais detalhes, consulte:

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

[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]:~$
    
por Radu Rădeanu 08.11.2013 / 08:49
14

Se a variável environemnt $debian_chroot existir e não estiver vazia, ${debian_chroot:+($debian_chroot)} será substituído por ($debian_chroot) (ou seja, o valor de $debian_chroot com parens ao redor dela).

$debian_chroot está definido em /etc/bash.bashrc para o conteúdo de /etc/debian_chroot se esse arquivo existir (não é por padrão) e $debian_chroot ainda não tem um valor.

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

PS1='${debian_chroot:+($debian_chroot)}\[email protected]\h:\w$ '

Como o nome sugere, você pode usar essa variável para indicar em qual chroot você está colocando etc/debian_chroot em suas pastas raiz do chroot.

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

Por padrão, não faz nada.

    
por Florian Diesch 08.11.2013 / 08:12