131 votes

Que fait "${debian_chroot:+($debian_chroot)}" dans mon invite de terminal ?

Dans ma définition de l'invite du terminal, dans mon .bashrc parmi d'autres choses, j'ai ce bout de code :

${debian_chroot:+($debian_chroot)}

À quoi cela sert-il, et en ai-je besoin ?

115voto

chaos Points 25386

La partie importante pour répondre à cette question est cet extrait de /etc/bash.bashrc :

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

Cela signifie que si la variable $debian_chroot est vide et le fichier /etc/debian_chroot existe et est lisible, la variable est définie comme le contenu du fichier.

C'est pour quoi faire ? Le dossier /etc/debian_chroot c'est lorsque vous avez un système debian chrooté à l'intérieur d'un autre système debian (ubuntu est basé sur debian). C'est donc pour avoir une meilleure vue d'ensemble. Pour distinguer si vous êtes dans le chroot ou non.

Lorsque vous disposez d'un chroot d'un autre système, par exemple en /srv/nfs4/netboot/ vous pouvez définir un nom pour ce chroot dans /srv/nfs4/netboot/etc/debian_chroot (dans mon cas, il s'agit d'un lecteur de démarrage net pxe nfs4) :

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

Et ensuite, quand vous chrootez à l'intérieur :

chroot /srv/nfs4/netboot/

Votre message ressemble à ceci :

(netboot)user@host:~#

76voto

Radu Rădeanu Points 156862

En général, ${var:+value} signifie :

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

El debian_chroot est définie dans /etc/bash.bashrc fichier. Il prend le contenu de /etc/debian_chroot si ce fichier existe et est lisible. Par défaut, ce fichier n'existe pas.

Pour plus de détails, voir :

Maintenant, pour mieux comprendre ce qui se passe exactement ici, faites ce qui suit dans le terminal :

radu@Radu:~$

21voto

Fabiano Soriani Points 543

Si la variable d'environnement $debian_chroot existe et n'est pas vide ${debian_chroot:+($debian_chroot)} est remplacé par ($debian_chroot) (c'est-à-dire la valeur de $debian_chroot avec des parenthèses autour).

$debian_chroot est fixé dans /etc/bash.bashrc au contenu de /etc/debian_chroot si ce fichier existe (il n'existe pas par défaut) et $debian_chroot n'a pas encore de valeur.

${debian_chroot:+($debian_chroot)} est généralement utilisé pour définir votre invite Bash, par exemple

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

Comme le nom le suggère, vous pouvez utiliser cette variable pour indiquer dans quel chroot vous vous trouvez en plaçant etc/debian_chroot dans les dossiers de la racine de votre chroot.

Si vous ne savez pas ce qu'est un chroot, il est fort probable que vous n'en ayez pas besoin ;-) Mais vous pouvez quand même en abuser pour inclure d'autres informations dans votre invite Bash

Par défaut, il ne fait rien.

0voto

WinEunuuchs2Unix Points 91128

Si vous n'avez jamais besoin d'utiliser debian_chroot alors c'est un endroit pratique pour mettre l'heure à laquelle l'invite de commande a été affichée en utilisant :

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

Tapez ceci dans votre terminal et regardez votre invite de commande changer avec le temps :

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

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

Après avoir réglé l'heure une fois, pour obtenir une horloge en marche qui se met à jour toutes les deux utilisations :

while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X