Na definição do prompt do terminal em meu .bashrc
arquivo, 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_chroot
estiver vazia e o arquivo /etc/debian_chroot
existir 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_chroot
variável é definida no /etc/bash.bashrc
arquivo. Leva o conteúdo do /etc/debian_chroot
arquivo 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_chroot
existir e não estiver vazia, ${debian_chroot:+($debian_chroot)}
ela será substituída por ($debian_chroot)
(esse é o valor de $debian_chroot
com parênteses ao seu redor).
$debian_chroot
é definido /etc/bash.bashrc
no conteúdo /etc/debian_chroot
se esse arquivo existir (não existe por padrão) e $debian_chroot
ainda 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_chroot
nas 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 &