web-dev-qa-db-ja.com

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

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

${debian_chroot:+($debian_chroot)}

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

86
fouric

この質問に答える重要な部分は、/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にいるかどうかを区別するため。

たとえば/srv/nfs4/netboot/に別のシステムのchrootがある場合、/srv/nfs4/netboot/etc/debian_chrootでこのchrootの名前を設定できます(私の場合はnfs4 pxeネットブートドライブです)。

user@Host:~# echo "netboot" >/srv/nfs4/netboot/etc/debian_chroot

そして、内部でchrootするとき:

chroot /srv/nfs4/netboot/

プロンプトは次のようになります。

(netboot)user@Host:~#
83
chaos

一般的に、${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 = "など」
(など)radu @ Radu:〜$
54
Radu Rădeanu

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

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

19
Florian Diesch

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 &
0