Answers:
回答此问题的重要部分是来自以下代码段/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系统中拥有chroot的debian系统时(ubuntu基于debian)。因此,这是一个更好的概述。区分您是否在chroot中。
例如,当您拥有另一个系统的chroot时,/srv/nfs4/netboot/
您可以为此chroot设置一个名称/srv/nfs4/netboot/etc/debian_chroot
(在我的情况下,这是一个nfs4 pxe netboot驱动器):
user@host:~# echo "netboot" >/srv/nfs4/netboot/etc/debian_chroot
然后当您在chroot中时:
chroot /srv/nfs4/netboot/
您的提示如下:
(netboot)user@host:~#
通常,${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 =“ test”='${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:~$
如果环境变量$debian_chroot
存在且不为空,${debian_chroot:+($debian_chroot)}
则替换为($debian_chroot)
(即$debian_chroot
周围有parens 的值)。
$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。
如果您不知道chroot是什么,那么您就不需要它了;-)但是您仍然可以滥用它,在Bash提示符中包含其他信息
默认情况下,它不执行任何操作。
如果您从不需要使用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 &