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

87

Dans ma définition d'invite de terminal dans mon .bashrcfichier, entre autres choses, j'ai cet extrait de code:

${debian_chroot:+($debian_chroot)}

Qu'est-ce que cela fait et j'en ai besoin?

fourique
la source

Réponses:

83

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_chrootest vide et que le fichier /etc/debian_chrootexiste et est lisible, la variable est définie sur le contenu du fichier.

Maintenant, à quoi ça sert? Le fichier /etc/debian_chrootest quand vous avez un système Debian chrooté dans un autre système Debian (Ubuntu est basé sur Debian). Donc, ceci est pour un meilleur aperçu. Pour distinguer si vous êtes dans le chroot ou pas.

Lorsque vous avez un chroot d’un autre système par exemple, /srv/nfs4/netboot/vous pouvez définir un nom pour ce chroot dans /srv/nfs4/netboot/etc/debian_chroot(dans mon cas, c’est un lecteur netboot Nfs4 pxe):

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

Et puis quand vous chrootez dedans:

chroot /srv/nfs4/netboot/

Votre invite ressemble à ceci:

(netboot)user@host:~#
le chaos
la source
55

Généralement, ${var:+value}signifie:

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

La debian_chrootvariable est définie dans le /etc/bash.bashrcfichier. Il prend le contenu du /etc/debian_chrootfichier 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 là-bas, procédez comme suit dans le terminal:

radu@Radu:~$PS1 = '$ {var: + ($ var)} \ u @ \ h: \ w \ $' radu @ Radu : ~ $ var = "test" ---- | ------------------ |

                  
                   
  
  
  V
( test ) radu @ radu : ~ $ var = "" radu @ radu : ~ $ var = "et ainsi de suite" ( et ainsi de suite ) radu @ radu : ~ $

Radu Rădeanu
la source
19

Si la variable d'environnement $debian_chrootexiste et qu'elle n'est pas vide, elle ${debian_chroot:+($debian_chroot)}est remplacée par ($debian_chroot)(c'est la valeur de $debian_chrootavec parens qui l'entoure).

$debian_chrootest défini /etc/bash.bashrcsur le contenu de /etc/debian_chrootsi ce fichier existe (il ne l’a pas par défaut) et $debian_chrootn’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 son nom l'indique, vous pouvez utiliser cette variable pour indiquer le chroot dans lequel vous vous trouvez en le plaçant etc/debian_chrootdans vos dossiers racine 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 toujours en abuser pour inclure d'autres informations dans votre invite Bash.

Par défaut, cela ne fait rien.

Florian Diesch
la source
0

Si vous n’avez jamais besoin de l’utiliser, debian_chrootc’est un endroit pratique pour indiquer l’heure à laquelle l’invite de commande s’affiche à l’aide des éléments suivants:

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

Tapez ceci dans votre terminal et regardez votre invite de commande changer avec l'heure:

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

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

Une fois l’heure réglée une fois, pour obtenir une horloge en cours de mise à jour à chaque utilisation:

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