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

87

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

${debian_chroot:+($debian_chroot)}

O que isso faz e eu preciso?

fouric
fonte

Respostas:

83

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á configurada para o conteúdo do arquivo.

Agora, o que é isso? O arquivo /etc/debian_chrooté quando você tem um sistema debian com chroot dentro de outro sistema debian (o ubuntu é baseado no debian). Portanto, 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/pode definir um nome para esse chroot /srv/nfs4/netboot/etc/debian_chroot(no meu caso, é uma unidade netfoot nfs4 pxe):

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

E então, quando você chroot dentro:

chroot /srv/nfs4/netboot/

Seu prompt é assim:

(netboot)user@host:~#
caos
fonte
55

Geralmente, ${var:+value}significa:

if $var is defined; 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 existe e é 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:

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 : ~ $

Radu Rădeanu
fonte
19

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

$debian_chrooté definido no /etc/bash.bashrcconteúdo de /etc/debian_chrootse esse arquivo existe (por padrão não existe) e $debian_chrootainda não tem 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 essa variável para indicar em qual chroot você está inserindo etc/debian_chrootas pastas raiz do chroot.

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

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

Florian Diesch
fonte
0

Se você nunca precisar usá debian_chroot-lo, é um local útil para definir a hora em que o prompt de comando foi exibido usando:

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

Digite isso no seu terminal e observe seu 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 é definido uma vez, para obter um relógio de corrida que atualiza a cada segundo uso:

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