“${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 netboot 磁碟機):

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\$ '
拉杜@拉杜:~$變數=“測試”
                  ----
                   |
  ------------------
  |
  V
(測試)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 &

相關內容