Apa yang dilakukan “$ {debian_chroot: + ($ debian_chroot)}” di terminal prompt saya?

87

Dalam definisi terminal prompt saya di .bashrcfile saya , antara lain, saya memiliki potongan kode ini:

${debian_chroot:+($debian_chroot)}

Apa yang dilakukan ini, dan apakah saya membutuhkannya?

empatik
sumber

Jawaban:

83

Bagian penting untuk menjawab pertanyaan ini adalah cuplikan dari /etc/bash.bashrc:

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

Ini berarti jika variabel $debian_chrootkosong dan file /etc/debian_chrootada dan dapat dibaca variabel diatur ke konten file.

Sekarang untuk apa ini? File tersebut /etc/debian_chrootadalah ketika Anda memiliki sistem debian chroot di dalam sistem debian lain (ubuntu didasarkan pada debian). Jadi ini untuk ikhtisar yang lebih baik. Untuk membedakan apakah Anda berada di chroot atau tidak.

Ketika Anda memiliki chroot dari sistem lain misalnya, /srv/nfs4/netboot/Anda dapat menetapkan nama untuk chroot ini /srv/nfs4/netboot/etc/debian_chroot(dalam kasus saya ini adalah drive netboot nfs4 pxe):

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

Dan kemudian ketika Anda chroot di dalam:

chroot /srv/nfs4/netboot/

Prompt Anda terlihat seperti ini:

(netboot)user@host:~#
kekacauan
sumber
55

Secara umum, ${var:+value}berarti:

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

The debian_chrootvariabel didefinisikan dalam /etc/bash.bashrcberkas. Dibutuhkan konten /etc/debian_chrootfile jika file ini ada dan dapat dibaca. Secara default, file ini tidak ada.

Untuk detail lebih lanjut, lihat:

Sekarang, untuk lebih memahami apa sebenarnya yang terjadi di sana, lakukan hal berikut di terminal:

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 = "dan seterusnya"
 (dan seterusnya) radu @ Radu: ~ $=""
:~$="and so on"
and so on)radu@Radu:~$
Radu Rădeanu
sumber
19

Jika variabel lingkungan $debian_chrootada dan tidak kosong ${debian_chroot:+($debian_chroot)}diganti oleh ($debian_chroot)(yaitu nilai $debian_chrootdengan parens di sekitarnya).

$debian_chrootdiatur /etc/bash.bashrcke konten /etc/debian_chrootjika file itu ada (tidak secara default) dan $debian_chrootbelum memiliki nilai.

${debian_chroot:+($debian_chroot)} biasanya digunakan untuk mendefinisikan Bash prompt Anda, misalnya

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

Seperti namanya, Anda dapat menggunakan variabel ini untuk menunjukkan chroot mana Anda berada dengan menempatkan etc/debian_chrootke dalam folder root chroot Anda.

Jika Anda tidak tahu apa itu chroot, kemungkinan Anda tidak membutuhkannya ;-) Tetapi Anda masih dapat menyalahgunakannya untuk memasukkan beberapa informasi lain ke dalam Bash prompt Anda

Secara default tidak melakukan apa-apa.

Florian Diesch
sumber
0

Jika Anda tidak perlu menggunakan debian_chrootmaka itu adalah tempat yang berguna untuk meletakkan waktu prompt perintah ditampilkan dengan menggunakan:

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

Ketik ini di terminal Anda dan perhatikan perubahan prompt perintah Anda seiring waktu:

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

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

Setelah waktu diatur satu kali, untuk mendapatkan jam berjalan yang memperbarui setiap penggunaan detik:

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