.bashrc
ファイルのターミナルプロンプト定義では、とりわけ、次のコードスニペットがあります。
${debian_chroot:+($debian_chroot)}
これは何をするもので、必要ですか?
この質問に答える重要な部分は、/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:~#
一般的に、${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:〜$
環境変数$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 &