Câu trả lời:
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_chroot
trống và tệp /etc/debian_chroot
tồ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_chroot
là 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:~#
Nói chung, ${var:+value}
có nghĩa là:
if $var is defined; then use 'value'; else do nothing
Các debian_chroot
biến được định nghĩa trong /etc/bash.bashrc
tập tin. Nó lấy nội dung của /etc/debian_chroot
tệ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:~$
Nếu biến môi trường $debian_chroot
tồ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_chroot
parens xung quanh nó).
$debian_chroot
được đặt trong /etc/bash.bashrc
nội dung /etc/debian_chroot
nếu tệp đó tồn tại (mặc định $debian_chroot
nó 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_chroot
và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ả.
Nếu bạn không bao giờ cần sử dụng debian_chroot
thì đó 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 &