Những gì $ $ {debian_chroot: + ($ debian_chroot)} làm gì trong dấu nhắc thiết bị đầu cuối của tôi?


87

Trong định nghĩa dấu nhắc thiết bị đầu cuối của tôi trong .bashrctệp của tôi , trong số những thứ khác, tôi có đoạn mã này:

${debian_chroot:+($debian_chroot)}

Cái này làm gì, và tôi có cần nó không?

Câu trả lời:


83

Phần quan trọng để trả lời câu hỏi này là đoạn trích từ /etc/bash.bashrc:

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

Nó có nghĩa là nếu biến $debian_chroottrống và tệp /etc/debian_chroottồn tại và có thể đọc được thì biến được đặt thành nội dung của tệp.

Bây giờ cái này để làm gì? Các tập tin /etc/debian_chrootlà khi bạn có một hệ thống debian chroot bên trong một hệ thống debian khác (ubfox dựa trên debian). Vì vậy, đây là cho một cái nhìn tổng quan tốt hơn. Để phân biệt xem bạn có ở trong chroot hay không.

Khi bạn có một chroot của một hệ thống khác, ví dụ như trong /srv/nfs4/netboot/bạn có thể đặt tên cho chroot này /srv/nfs4/netboot/etc/debian_chroot(trong trường hợp của tôi đó là ổ đĩa netboot nfs4 pxe):

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

Và sau đó khi bạn chroot bên trong:

chroot /srv/nfs4/netboot/

Lời nhắc của bạn trông như thế này:

(netboot)user@host:~#

55

Nói chung, ${var:+value}có nghĩa là:

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

Các debian_chrootbiến được định nghĩa trong /etc/bash.bashrctập tin. Nó lấy nội dung của /etc/debian_chroottệp nếu tệp này tồn tại và có thể đọc được. Theo mặc định, tập tin này không tồn tại.

Để biết thêm chi tiết, xem:

Bây giờ, để hiểu rõ hơn chính xác những gì đang xảy ra ở đó, hãy làm như sau trong thiết bị đầu cuối:

radu@Radu:~$PS1 = '$ {var: + ($ var)} \ u @ \ h: \ w \ $'
 radu @ Radu: ~ $ var = "kiểm tra"='${var:+($var)}\u@\h:\w\$ '
:~$="test"
                  --------
                   ||
  ------------------------------------
  ||
  V
(kiểm tra) radu @ Radu: ~ $test)radu@Radu:~$ var = ""
 radu @ Radu: ~ $ var = "và cứ thế"
 (vân vân) radu @ Radu: ~ $=""
:~$="and so on"
and so on)radu@Radu:~$

19

Nếu biến môi trường $debian_chroottồn tại và không trống ${debian_chroot:+($debian_chroot)}được thay thế bằng ($debian_chroot)(đó là giá trị của các $debian_chrootparens xung quanh nó).

$debian_chrootđược đặt trong /etc/bash.bashrcnội dung /etc/debian_chrootnếu tệp đó tồn tại (mặc định $debian_chrootnó không có giá trị ) và chưa có giá trị.

${debian_chroot:+($debian_chroot)} thường được sử dụng để xác định dấu nhắc Bash của bạn, ví dụ

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

Như tên cho thấy, bạn có thể sử dụng biến này để cho biết bạn đang sử dụng chroot nào bằng cách đặt etc/debian_chrootvào các thư mục gốc chroot của bạn.

Nếu bạn không biết chroot là gì thì rất có thể bạn không cần điều đó ;-) Nhưng bạn vẫn có thể lạm dụng nó để đưa một số thông tin khác vào dấu nhắc Bash của bạn

Theo mặc định, nó không làm gì cả.


0

Nếu bạn không bao giờ cần sử dụng debian_chrootthì đó là nơi thuận tiện để đặt thời gian dấu nhắc lệnh được hiển thị bằng cách sử dụng:

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

Nhập cái này vào terminal của bạn và xem thay đổi dấu nhắc lệnh của bạn theo thời gian:

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

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

Sau khi thời gian được đặt một lần, để có được đồng hồ chạy cập nhật mỗi giây sử dụng:

while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.