Che cosa fa "$ {debian_chroot: + ($ debian_chroot)}" nel mio terminale?

63

Nella mia definizione del prompt del terminale nel mio file .bashrc , tra le altre cose, ho questo frammento di codice:

${debian_chroot:+($debian_chroot)}

Che cosa fa questo, e ne ho bisogno?

    
posta fouric 08.11.2013 - 07:03

3 risposte

66

La parte importante per rispondere a questa domanda è questo snippet da /etc/bash.bashrc :

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

Significa che se la variabile $debian_chroot è vuota e il file /etc/debian_chroot esiste ed è leggibile, la variabile è impostata sul contenuto del file.

A cosa serve? Il file /etc/debian_chroot è quando si ha un sistema debian chroot all'interno di un altro sistema debian (ubuntu è basato su debian). Quindi questo è per una migliore visione d'insieme. Per distinguere se sei in chroot o meno.

Quando hai un chroot di un altro sistema per esempio in /srv/nfs4/netboot/ puoi impostare un nome per questo chroot in /srv/nfs4/netboot/etc/debian_chroot (nel mio caso si tratta di un'unità nfs4 pxe netboot):

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

E poi quando fai il chroot all'interno:

chroot /srv/nfs4/netboot/

Il tuo prompt assomiglia a questo:

(netboot)[email protected]:~#
    
risposta data chaos 08.11.2013 - 08:15
37

Generalmente, ${var:+value} significa:

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

La variabile debian_chroot è definita nel file /etc/bash.bashrc . Prende il contenuto del file /etc/debian_chroot se questo file esiste ed è leggibile. Di default questo file non esiste.

Per ulteriori dettagli, vedi:

Ora, per capire meglio che cosa sta succedendo lì, fai quanto segue nel terminale:

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

Se la variabile environemnt $debian_chroot esiste e non è vuota ${debian_chroot:+($debian_chroot)} è sostituita da ($debian_chroot) (cioè il valore di $debian_chroot con parenti attorno ad esso).

$debian_chroot è impostato in /etc/bash.bashrc sul contenuto di /etc/debian_chroot se tale file esiste (non per impostazione predefinita) e $debian_chroot non ha ancora un valore.

${debian_chroot:+($debian_chroot)} viene in genere utilizzato per definire il prompt di Bash, ad esempio

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

Come suggerisce il nome, puoi usare questa variabile per indicare quale chroot ti trovi posizionando etc/debian_chroot nelle tue cartelle root di chroot.

Se non sai cosa è un chroot è probabile che non ti serva ;-) Tuttavia potresti comunque abusarne per includere altre informazioni nel prompt di Bash

Di default non fa nulla.

    
risposta data Florian Diesch 08.11.2013 - 08:12

Leggi altre domande sui tag