私の.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 システム内に 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:~#
答え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\$'
ラドゥ@ラドゥ:~$var = "テスト"
----
|
------------------
|
五
(テスト)radu@Radu:~$var=""
ラドゥ@ラドゥ:~$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 &