$ {debian_chroot: -} Por que se preocupar com: -? [duplicado]

2
  1. .bashrc e bash.bashrc incluem:

    [ -z "${debian_chroot:-}" ]
    
  2. A página manibra do Bash declara o seguinte sobre as expansões de parâmetros da seguinte forma: $ {parameter: -word}

    Se o parâmetro não for definido ou nulo, a expansão da palavra será substituída. Caso contrário, o valor do parâmetro é substituído .

  3. Por que escrever

    "${debian_chroot:-}"
    

    e não simplesmente

    "${debian_chroot}"
    

    ?

Responda com: link

    
por stöpsel_neaty 17.12.2015 / 19:28

1 resposta

0

A parte que você mencionou vem antes no .bashrc , enquanto o que é mencionado na duplicata vem um pouco mais tarde, na parte PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$ ' . Eles trabalham juntos, apesar de tudo!

Então, o que o código que você menciona diz em termos de inglês simples? Aqui é para referência.

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

Começa com esta parte ${debian_chroot:-} . Temos essa variável debian_chroot definida? Em caso afirmativo, faça eco dessa variável, mas, se não, faça eco do que vier depois de - . E o que vem depois de - ? Nada ! Exatamente isso ! Porque se importar ? E se a variável estiver definida? Então, não precisamos executar o corpo da instrução if e apenas usar debian_chroot variable como está dentro do prompt PS1 depois. Lembra que eu disse que esses dois pedaços de código funcionam juntos? OK, seguindo em frente.

Na próxima etapa, se avaliarmos a variável como em branco, verificaremos a existência do arquivo /etc/debian_chroot legível. No Ubuntu 14.04, pelo menos, não há arquivo /etc/debian_chroot . Então, sempre que você começar o bash, vai "Ah, então o debian_chroot não está definido e não temos esse arquivo lá ... OK, deixe apenas \ u @ \ h: \ w \ $ dentro do prompt!"

Agora, o que acontece se tivermos esse arquivo?

xieerqi:
$ sudo vi /etc/debian_chroot
[sudo] password for xieerqi: 

xieerqi:
$ bash
(HELLOWORLD)xieerqi@eagle:~$ echo $debian_chroot
HELLOWORLD
(HELLOWORLD)xieerqi@eagle:~$ 

OK, rastreie o código novamente: temos debian_chroot set? Não. Temos esse arquivo /etc/debian_chroot ? Sim, leve seu conteúdo e coloque-os nesse prompt PS1 dos usuários. Parece que foi exatamente o que aconteceu na minha saída, certo?

    
por Sergiy Kolodyazhnyy 18.12.2015 / 11:56