回答:
この質問に答える重要な部分は、次のスニペットです/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/、この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:~#
一般的に、${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"='${var:+($var)}\u@\h:\w\$ '
:~$="test"
--------
||
------------------------------------
||
V
(テスト)radu @ Radu:〜$test)radu@Radu:~$ var = ""
radu @ Radu:〜$ var = "など"
(など)radu @ Radu:〜$=""
:~$="and so on"
and so on)radu@Radu:~$
環境変数$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プロンプトに他の情報を含めることもできます。
デフォルトでは何もしません。
使用する必要がない場合は、次を使用しdebian_chrootてコマンドプロンプトが表示された時間を入力するのに便利です。
export PROMPT_COMMAND='debian_chroot=$(date +%r)'
これを端末に入力し、コマンドプロンプトが時間とともに変化するのを確認します。
rick@alien:~$ export PROMPT_COMMAND='debian_chroot=$(date +%r)'
(09:14:59 PM)rick@alien:~$
時間を1回設定した後、1秒ごとに更新される実行クロックを取得するには:
while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &