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

63

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

${debian_chroot:+($debian_chroot)}

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

    
posée fouric 08.11.2013 - 07:03
la source

3 réponses

66

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

A quoi ça sert? Le fichier /etc/debian_chroot se trouve lorsque vous avez un système debian intégré dans un autre système debian (ubuntu est basé sur debian). C'est donc pour une meilleure vue d'ensemble. Pour distinguer si vous êtes dans le chroot ou non.

Lorsque vous avez un chroot d'un autre système, par exemple dans /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 nfs4 pxe netboot):

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

Et puis quand vous chrootez à l'intérieur:

chroot /srv/nfs4/netboot/

Votre invite ressemble à ceci:

(netboot)[email protected]:~#
    
réponse donnée chaos 08.11.2013 - 08:15
la source
37

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

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

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

[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]:~$
    
réponse donnée Radu Rădeanu 08.11.2013 - 08:49
la source
14

Si la variable environemnt $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 parens autour de lui).

$debian_chroot est défini sur /etc/bash.bashrc au contenu de /etc/debian_chroot si ce fichier existe (il ne l'est 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)}\[email protected]\h:\w$ '

Comme son nom l'indique, vous pouvez utiliser cette variable pour indiquer le chroot dans lequel vous vous trouvez en plaçant etc/debian_chroot dans vos dossiers racine chroot.

Si vous ne savez pas ce qu’est un chroot, il ya des chances 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, il ne fait rien.

    
réponse donnée Florian Diesch 08.11.2013 - 08:12
la source

Lire d'autres questions sur les étiquettes