Cosa fa "$ {debian_chroot: + ($ debian_chroot)}" nel mio prompt del terminale?


87

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

${debian_chroot:+($debian_chroot)}

Cosa fa questo e ne ho bisogno?

Risposte:


83

La parte importante per rispondere a questa domanda è questo frammento di /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_chrootesiste ed è leggibile, la variabile è impostata sul contenuto del file.

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

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

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

E poi quando chroot dentro:

chroot /srv/nfs4/netboot/

Il tuo prompt è simile al seguente:

(netboot)user@host:~#

55

Generalmente ${var:+value}significa:

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

La debian_chrootvariabile è definita nel /etc/bash.bashrcfile. Prende il contenuto del /etc/debian_chrootfile se questo file esiste ed è leggibile. Per impostazione predefinita, questo file non esiste.

Per maggiori dettagli, vedi:

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

radu@Radu:~$PS1 = '$ {var: + ($ var)} \ u @ \ h: \ w \ $'
 radu @ Radu: ~ $ var = "test"='${var:+($var)}\u@\h:\w\$ '
:~$="test"
                  --------
                   ||
  ------------------------------------
  ||
  V
(test) radu @ Radu: ~ $test)radu@Radu:~$ var = ""
 radu @ Radu: ~ $ var = "e così via"
 (e così via) radu @ Radu: ~ $=""
:~$="and so on"
and so on)radu@Radu:~$

19

Se la variabile di ambiente $debian_chrootesiste e non è vuota ${debian_chroot:+($debian_chroot)}viene sostituita da ($debian_chroot)(questo è il valore di $debian_chrootcon parentesi attorno ad essa).

$debian_chrootè impostato /etc/bash.bashrcsul contenuto di /etc/debian_chrootse quel file esiste (non è di default) e $debian_chrootnon ha ancora un valore.

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

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Come suggerisce il nome, è possibile utilizzare questa variabile per indicare in quale chroot ci si trova inserendo etc/debian_chrootle cartelle della radice chroot.

Se non sai quali sono le probabilità di chroot, non è necessario che tu abbia bisogno ;-) Ma potresti comunque abusarne per includere alcune altre informazioni nel tuo prompt di Bash

Di default non fa nulla.


0

Se non hai mai bisogno di usarlo debian_chroot, è un posto utile per impostare l'ora in cui il prompt dei comandi è stato visualizzato usando:

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

Digita questo nel tuo terminale e guarda il tuo prompt dei comandi cambiare con il tempo:

rick@alien:~$ export PROMPT_COMMAND='debian_chroot=$(date +%r)'

(09:14:59 PM)rick@alien:~$ 

Dopo aver impostato l'ora una volta, per ottenere un orologio in esecuzione che aggiorni ogni secondo utilizzo:

while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.