Risposte:
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_chroot
esiste 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:~#
Generalmente ${var:+value}
significa:
if $var is defined; then use 'value'; else do nothing
La debian_chroot
variabile è definita nel /etc/bash.bashrc
file. Prende il contenuto del /etc/debian_chroot
file 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:~$
Se la variabile di ambiente $debian_chroot
esiste e non è vuota ${debian_chroot:+($debian_chroot)}
viene sostituita da ($debian_chroot)
(questo è il valore di $debian_chroot
con parentesi attorno ad essa).
$debian_chroot
è impostato /etc/bash.bashrc
sul contenuto di /etc/debian_chroot
se quel file esiste (non è di default) e $debian_chroot
non 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_chroot
le 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.
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 &