當前位置: 首頁>>技術教程>>正文


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

, , , , ,

問題描述

在我的.bashrc文件中的終端提示定義中,除此之外,我還有以下代碼片段:

${debian_chroot:+($debian_chroot)}

這是做什麽的,我需要它嗎?

最佳解決方案

回答這個問題的重要部分是/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/中,您可以在/srv/nfs4/netboot/etc/debian_chroot中設置此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"
                  ----
                   |
  ------------------
  |
  V
(test)radu@Radu:~$ var=""
radu@Radu:~$ var="and so on"
(and so on)radu@Radu:~$

第三種解決方案

如果環境變量$debian_chroot存在且不為空,則${debian_chroot:+($debian_chroot)}($debian_chroot)(即其周圍的parens的$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提示中包含一些其他信息

默認情況下,它不執行任何操作。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/1315.html,未經允許,請勿轉載。