In meiner Terminal-Eingabeaufforderungsdefinition in meiner .bashrc
Datei 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_chroot
leer ist und die Datei /etc/debian_chroot
existiert und lesbar ist, wird die Variable auf den Inhalt der Datei gesetzt.
Wofür ist das nun? Die Datei /etc/debian_chroot
ist 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_chroot
Variable ist in /etc/bash.bashrc
der Datei definiert. Sie übernimmt den Inhalt der /etc/debian_chroot
Datei, wenn diese existiert und lesbar ist. Standardmäßig existiert diese Datei nicht.
Weitere Einzelheiten finden Sie unter:
- Was ist $debian_chroot in .bashrc?
- Verstehen Sie dieses .bashrc-Skript (geschweifte Klammern, eval, …)
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_chroot
vorhanden und nicht leer ist, ${debian_chroot:+($debian_chroot)}
wird sie durch ersetzt ($debian_chroot)
(das ist der Wert von $debian_chroot
mit Klammern darum).
$debian_chroot
/etc/bash.bashrc
wird auf den Inhalt gesetzt , /etc/debian_chroot
wenn diese Datei existiert (standardmäßig ist dies nicht der Fall) und $debian_chroot
noch 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_chroot
in 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 &