“${debian_chroot:+($debian_chroot)}” 在我的终端提示符中起什么作用?

“${debian_chroot:+($debian_chroot)}” 在我的终端提示符中起什么作用?

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

${debian_chroot:+($debian_chroot)}

它起什么作用?我需要它吗?

答案1

回答这个问题的重要部分是以下摘录/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 系统内有一个 chrooted debian 系统时使用的(ubuntu 基于 debian)。所以这是为了更好的概览。区分您是否处于 chroot 中。

例如,当您有另一个系统的 chroot 时,/srv/nfs4/netboot/您可以为该 chroot 设置一个名称/srv/nfs4/netboot/etc/debian_chroot(在我的情况下,它是一个 nfs4 pxe 网络启动驱动器):

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

然后当你 chroot 到内部时:

chroot /srv/nfs4/netboot/

你的提示看起来是这样的:

(netboot)user@host:~#

答案2

一般而言,${var:+value}意味着:

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

debian_chroot变量在文件中定义。如果文件存在且可读,则变量/etc/bash.bashrc将获取文件内容。默认情况下,该文件不存在。/etc/debian_chroot

有关详细信息,请参阅:

现在,为了更好地了解那里到底发生了什么,请在终端中执行以下操作:

radu@Radu:~$PS1='${var:+($var)}\u@\h:\w\$ '
radu@Radu:~$变量=“测试”
                  ----
                   |
  ------------------
  |
(测试)radu@Radu:~$变量=""
radu@Radu:~$var="等等"
(等等)radu@Radu:~$

答案3

如果环境变量$debian_chroot存在且不为空,${debian_chroot:+($debian_chroot)}则替换为(即带有括号($debian_chroot)的值)。$debian_chroot

$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_chrootchroot 根文件夹来指示您处于哪个 chroot 中。

如果你不知道 chroot 是什么,那么你可能不需要它 ;-) 但你仍然可以滥用它将一些其他信息包含到你的 Bash 提示符中

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

答案4

如果你从来不需要使用,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 &

相关内容