在我的.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_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 &