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

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

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

${debian_chroot:+($debian_chroot)}

Was macht das und brauche ich es?

Antwort1

Der wichtige Teil zur Beantwortung dieser Frage ist dieser Ausschnitt aus /etc/bash.bashrc:

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

Das bedeutet, wenn die Variable $debian_chrootleer ist und die Datei /etc/debian_chrootexistiert und lesbar ist, wird die Variable auf den Inhalt der Datei gesetzt.

Wofür ist das nun? Die Datei /etc/debian_chrootist da, 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 sich im Chroot befinden oder nicht.

Wenn Sie beispielsweise über ein Chroot eines anderen Systems verfügen, /srv/nfs4/netboot/können Sie für dieses Chroot einen Namen festlegen /srv/nfs4/netboot/etc/debian_chroot(in meinem Fall ist es ein NFS4-PXE-Netboot-Laufwerk):

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

Und wenn Sie dann ein Chroot-Verfahren durchführen:

chroot /srv/nfs4/netboot/

Ihre Eingabeaufforderung sieht folgendermaßen aus:

(netboot)user@host:~#

Antwort2

Im Allgemeinen ${var:+value}bedeutet:

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

Die debian_chrootVariable ist in /etc/bash.bashrcder Datei definiert. Sie übernimmt den Inhalt der /etc/debian_chrootDatei, wenn diese existiert und lesbar ist. Standardmäßig existiert diese Datei nicht.

Weitere Einzelheiten finden Sie unter:

Um besser zu verstehen, was dort genau passiert, führen Sie im Terminal Folgendes aus:

radu@Radu:~$PS1='${var:+($var)}\u@\h:\w\$ '
radu@Radu:~$var="Prüfung"
                  ----
                   |
  ------------------
  |
  V
(Test)radu@Radu:~$var=""
radu@Radu:~$var="und so weiter"
(und so weiter)radu@Radu:~$

Antwort3

Wenn die Umgebungsvariable $debian_chrootvorhanden und nicht leer ist, ${debian_chroot:+($debian_chroot)}wird sie durch ersetzt ($debian_chroot)(das ist der Wert von $debian_chrootmit Klammern darum).

$debian_chroot/etc/bash.bashrcwird auf den Inhalt gesetzt , /etc/debian_chrootwenn diese Datei existiert (standardmäßig ist dies nicht der Fall) und $debian_chrootnoch keinen Wert hat.

${debian_chroot:+($debian_chroot)}wird normalerweise verwendet, um Ihre Bash-Eingabeaufforderung zu definieren, zum Beispiel

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

Wie der Name schon sagt, können Sie diese Variable verwenden, um anzugeben, in welchem ​​Chroot Sie sich befinden, indem Sie sie etc/debian_chrootin Ihre Chroot-Stammordner platzieren.

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

Standardmäßig passiert nichts.

Antwort4

Wenn Sie es nie verwenden müssen debian_chroot, können Sie hier bequem die Uhrzeit eintragen, zu der die Eingabeaufforderung angezeigt wurde:

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, verwenden Sie Folgendes, um eine laufende Uhr zu erhalten, die jede Sekunde aktualisiert wird:

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

verwandte Informationen