Що робить "$ {debian_chroot: + ($ debian_chroot)}" у моєму термінальному запиті?


86

У моєму .bashrcфайлі підказки підказки , серед іншого, у мене є цей фрагмент коду:

${debian_chroot:+($debian_chroot)}

Що це робить, і чи потрібно це мені?

Відповіді:


83

Важливою частиною відповіді на це питання є цей фрагмент від /etc/bash.bashrc:

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

Це означає, що якщо змінна $debian_chrootпорожня, а файл /etc/debian_chrootіснує і читабельна, змінна встановлюється у вміст файлу.

Тепер для чого це? Цей файл /etc/debian_chroot- це якщо у вас система з хронізованою системою debian всередині іншої системи debian (ubuntu заснована на debian). Тож це для кращого огляду. Щоб розрізнити, чи є ви в хроту чи ні.

Якщо у вас є chroot іншої системи, наприклад у, /srv/nfs4/netboot/ви можете встановити ім'я цього chroot в /srv/nfs4/netboot/etc/debian_chroot(у моєму випадку це nfs4 pxe netboot drive):

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

І тоді, коли ти хротуєшся всередині:

chroot /srv/nfs4/netboot/

Ваше підказка виглядає так:

(netboot)user@host:~#

54

Як правило, ${var:+value}означає:

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

debian_chrootМінлива визначена в /etc/bash.bashrcфайлі. Він приймає вміст /etc/debian_chrootфайлу, якщо цей файл існує і читабельний. За замовчуванням цей файл не існує.

Докладніше див:

Тепер, щоб краще зрозуміти, що саме там відбувається, зробіть наступне в терміналі:

radu@Radu:~$PS1 = '$ {var: + ($ var)} \ u @ \ h: \ w \ $'
 radu @ Radu: ~ $ var = "тест"='${var:+($var)}\u@\h:\w\$ '
:~$="test"
                  --------
                   ||
  ------------------------------------
  ||
  V
(тест) radu @ Radu: ~ $test)radu@Radu:~$ var = ""
 radu @ Radu: ~ $ var = "і т. д."
 (і так далі) radu @ Radu: ~ $=""
:~$="and so on"
and so on)radu@Radu:~$

19

Якщо змінна середовища $debian_chrootіснує, а вона не порожня, ${debian_chroot:+($debian_chroot)}її замінюють на ($debian_chroot)(тобто значення $debian_chrootз паролями навколо неї).

$debian_chrootвстановлюється у /etc/bash.bashrcвміст, /etc/debian_chrootякщо цей файл існує (він за замовчуванням $debian_chrootне має ) і ще не має значення.

${debian_chroot:+($debian_chroot)} зазвичай використовується для визначення, наприклад, вашого запиту Bash

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

Як випливає з назви, ви можете використовувати цю змінну, щоб вказати, в якому хроні ви знаходитесь, розмістивши etc/debian_chrootу своїх кореневих папках chroot.

Якщо ви не знаєте, що таке "chroot" - це вам не потрібно ;-) Але ви все одно можете зловживати ним, щоб включити якусь іншу інформацію у своє запит Bash.

За замовчуванням він нічого не робить.


0

Якщо вам ніколи не потрібно користуватися, debian_chrootто це зручне місце, щоб викласти час відображення командного рядка, використовуючи:

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

Введіть це у свій термінал і спостерігайте за тим, як змінюється командна строка з часом:

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

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

Після встановлення часу один раз, щоб отримати годинник, що працює, який оновлює кожне друге використання:

while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.