在我的.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_chroot
chroot 根文件夹来指示您处于哪个 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 &