终端提示中的“ $ {debian_chroot:+($ debian_chroot)}”是做什么的?


86

.bashrc文件的终端提示定义中,除其他外,我有以下代码片段:

${debian_chroot:+($debian_chroot)}

这是做什么用的,我需要吗?

Answers:


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系统中拥有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:~#

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 =“ 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:~$

19

如果环境变量$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提示符中包含其他信息

默认情况下,它不执行任何操作。


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 &
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.