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

fou*_*ric 119 bash debian prompt chroot bashrc

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

${debian_chroot:+($debian_chroot)}
Run Code Online (Sandbox Code Playgroud)

这有什么作用,我需要它吗?

cha*_*aos 109

回答这个问题的重要部分是以下片段/etc/bash.bashrc

if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi
Run Code Online (Sandbox Code Playgroud)

这意味着如果变量$debian_chroot为空且文件/etc/debian_chroot存在且可读,则将变量设置为文件的内容。

现在这是为了什么?该文件/etc/debian_chroot是当您在另一个 debian 系统(ubuntu 基于 debian)中有一个 chrooted 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
Run Code Online (Sandbox Code Playgroud)

然后当你在里面 chroot 时:

chroot /srv/nfs4/netboot/
Run Code Online (Sandbox Code Playgroud)

您的提示如下所示:

(netboot)user@host:~#
Run Code Online (Sandbox Code Playgroud)


Rad*_*anu 68

一般来说,${var:+value}意思是:

if $var is defined; then use 'value'; else do nothing
Run Code Online (Sandbox Code Playgroud)

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

有关更多详细信息,请参阅:

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

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


Flo*_*sch 21

如果环境变量$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\$ '
Run Code Online (Sandbox Code Playgroud)

顾名思义,您可以使用此变量通过放入etc/debian_chrootchroot 根文件夹来指示您所在的 chroot。

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

默认情况下它不做任何事情。