端末プロンプトで「$ {debian_chroot:+($ debian_chroot)}」は何をしますか?


87

.bashrcファイル内の端末プロンプト定義には、とりわけ、次のコードスニペットがあります。

${debian_chroot:+($debian_chroot)}

これは何をするもので、必要ですか?

回答:


83

この質問に答える重要な部分は、次のスニペットです/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:~#

55

一般的に、${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:~$

19

環境変数$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プロンプトに他の情報を含めることもできます。

デフォルトでは何もしません。


0

使用する必要がない場合は、次を使用し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 &
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.