Co robi „$ {debian_chroot: + ($ debian_chroot)}” w moim monitie terminalu?

86

W definicji monitu terminala w .bashrcpliku mam między innymi ten fragment kodu:

${debian_chroot:+($debian_chroot)}

Co to robi i czy jest mi potrzebne?

czterokrotnie
źródło

Odpowiedzi:

83

Ważną częścią odpowiedzi na to pytanie jest ten fragment z /etc/bash.bashrc:

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

Oznacza to, że jeśli zmienna $debian_chrootjest pusta, a plik /etc/debian_chrootistnieje i można go odczytać, zmienna jest ustawiona na zawartość pliku.

Po co to jest? Plik /etc/debian_chrootjest, gdy masz chrootowany system debian w innym systemie debian (ubuntu jest oparte na debianie). To jest dla lepszego przeglądu. Aby odróżnić, czy jesteś w chroot, czy nie.

Gdy masz chroot innego systemu, na przykład /srv/nfs4/netboot/, możesz ustawić nazwę tego chroota w /srv/nfs4/netboot/etc/debian_chroot(w moim przypadku jest to dysk netfoot nfs4 pxe):

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

A potem, gdy chrootujesz w środku:

chroot /srv/nfs4/netboot/

Twój monit wygląda następująco:

(netboot)user@host:~#
chaos
źródło
54

Ogólnie ${var:+value}oznacza:

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

debian_chrootZmienna jest zdefiniowana w /etc/bash.bashrcpliku. Zajmuje zawartość /etc/debian_chrootpliku, jeśli plik ten istnieje i można go odczytać. Domyślnie ten plik nie istnieje.

Aby uzyskać więcej informacji, zobacz:

Teraz, aby lepiej zrozumieć, co dokładnie tam się dzieje, wykonaj następujące czynności w terminalu:

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

                  
                   
  
  
  V.
( test ) radu @ Radu : ~ $ var = "" radu @ Radu : ~ $ var = "i tak dalej" ( i tak dalej ) radu @ Radu : ~ $

Radu Rădeanu
źródło
19

Jeśli zmienna środowiskowa $debian_chrootistnieje i nie jest pusta, ${debian_chroot:+($debian_chroot)}jest zastępowana przez ($debian_chroot)(to jest wartość $debian_chrootz otaczającymi ją parens).

$debian_chrootjest ustawiony /etc/bash.bashrcna zawartość, /etc/debian_chrootjeśli ten plik istnieje (domyślnie $debian_chrootnie istnieje) i nie ma jeszcze wartości.

${debian_chroot:+($debian_chroot)} jest zwykle używany, na przykład, do zdefiniowania twojego polecenia Bash

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

Jak sama nazwa wskazuje, możesz użyć tej zmiennej, aby wskazać, w którym chroot jesteś, umieszczając go etc/debian_chrootw folderach głównych chroot.

Jeśli nie wiesz, co to jest chroot, nie potrzebujesz tego ;-) Ale nadal możesz nadużywać go, aby dołączyć inne informacje do monitu Bash

Domyślnie nic nie robi.

Florian Diesch
źródło
0

Jeśli nigdy nie musisz go używać debian_chroot, jest to przydatne miejsce, aby ustawić czas wyświetlania wiersza polecenia za pomocą:

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

Wpisz to w swoim terminalu i obserwuj zmiany wiersza poleceń wraz z czasem:

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

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

Po jednokrotnym ustawieniu czasu, aby uzyskać bieżący zegar, który aktualizuje się co sekundę, użyj:

while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &
WinEunuuchs2Unix
źródło