Was macht "$ {debian_chroot: + ($ debian_chroot)}" in meiner Terminal-Eingabeaufforderung?

87

In meiner Terminal-Eingabeaufforderungsdefinition in meiner .bashrcDatei habe ich unter anderem folgenden Codeausschnitt:

${debian_chroot:+($debian_chroot)}

Was macht das und brauche ich das?

vier
quelle

Antworten:

83

Der wichtige Teil, um diese Frage zu beantworten, ist dieser Ausschnitt aus /etc/bash.bashrc:

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

Wenn die Variable $debian_chrootleer und die Datei /etc/debian_chrootvorhanden und lesbar ist, wird die Variable auf den Inhalt der Datei gesetzt.

Wofür ist das jetzt? Die Datei /etc/debian_chrootist, wenn Sie ein Chroot-Debian-System in einem anderen Debian-System haben (Ubuntu basiert auf Debian). Dies dient also der besseren Übersicht. Um zu unterscheiden, ob Sie in der Chroot sind oder nicht.

Wenn Sie beispielsweise eine Chroot eines anderen Systems haben /srv/nfs4/netboot/, können Sie einen Namen für diese Chroot /srv/nfs4/netboot/etc/debian_chrootfestlegen (in meinem Fall ein nfs4 pxe-Netboot-Laufwerk):

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

Und dann, wenn Sie drinnen chroot:

chroot /srv/nfs4/netboot/

Ihre Eingabeaufforderung sieht folgendermaßen aus:

(netboot)user@host:~#
Chaos
quelle
55

Im Allgemeinen ${var:+value}bedeutet:

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

Die debian_chrootVariable wird in /etc/bash.bashrcDatei definiert . Es nimmt den Inhalt der /etc/debian_chrootDatei, wenn diese Datei existiert und lesbar ist. Standardmäßig existiert diese Datei nicht.

Weitere Einzelheiten finden Sie unter:

Um besser zu verstehen, was genau dort passiert, gehen Sie im Terminal wie folgt vor:

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 = "und so weiter"
 (und so fort) radu @ Radu: ~ $=""
:~$="and so on"
and so on)radu@Radu:~$
Radu Rădeanu
quelle
19

Wenn die Umgebungsvariable $debian_chrootexistiert und nicht leer ${debian_chroot:+($debian_chroot)}ist, wird sie durch ersetzt ($debian_chroot)(das ist der Wert von $debian_chrootwith parens).

$debian_chrootwird /etc/bash.bashrcauf den Inhalt gesetzt, /etc/debian_chrootwenn diese Datei existiert (standardmäßig nicht) und $debian_chrootnoch keinen Wert hat.

${debian_chroot:+($debian_chroot)} wird normalerweise zum Definieren der Bash-Eingabeaufforderung verwendet

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

Wie der Name schon sagt, können Sie diese Variable verwenden, um anzugeben, in welcher Chroot Sie sich befinden, indem Sie sie etc/debian_chrootin Ihren Chroot-Stammordnern ablegen.

Wenn Sie nicht wissen, was eine Chroot ist, brauchen Sie das wahrscheinlich nicht ;-) Aber Sie können es trotzdem missbrauchen, um andere Informationen in Ihre Bash-Eingabeaufforderung aufzunehmen

Standardmäßig macht es nichts.

Florian Diesch
quelle
0

Wenn Sie diese Option nie benötigen, können debian_chrootSie die Uhrzeit, zu der die Eingabeaufforderung angezeigt wurde, folgendermaßen eingeben:

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

Geben Sie dies in Ihr Terminal ein und beobachten Sie, wie sich Ihre Eingabeaufforderung mit der Zeit ändert:

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

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

Nachdem die Zeit einmal eingestellt wurde, um eine laufende Uhr zu erhalten, die jede Sekunde aktualisiert, verwenden Sie:

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