¿Qué hace "${debian_chroot:+($debian_chroot)}" en el indicador de mi terminal?

¿Qué hace "${debian_chroot:+($debian_chroot)}" en el indicador de mi terminal?

En la definición del indicador de terminal en mi .bashrcarchivo, entre otras cosas, tengo este fragmento de código:

${debian_chroot:+($debian_chroot)}

¿Qué hace esto? ¿Lo necesito?

Respuesta1

La parte importante para responder esta pregunta es este fragmento de /etc/bash.bashrc:

if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

Significa que si la variable $debian_chrootestá vacía y el archivo /etc/debian_chrootexiste y es legible, la variable se establece en el contenido del archivo.

¿Para qué es esto? El archivo /etc/debian_chrootes cuando tienes un sistema Debian chroot dentro de otro sistema Debian (ubuntu está basado en Debian). Entonces esto es para una mejor descripción general. Para distinguir si estás en el chroot o no.

Cuando tienes un chroot de otro sistema, por ejemplo, /srv/nfs4/netboot/puedes establecer un nombre para este chroot /srv/nfs4/netboot/etc/debian_chroot(en mi caso es una unidad netboot nfs4 pxe):

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

Y luego, cuando haces chroot dentro:

chroot /srv/nfs4/netboot/

Su mensaje se ve así:

(netboot)user@host:~#

Respuesta2

Generalmente, ${var:+value}significa:

if $var is defined and not null; then use 'value'; else do nothing

La debian_chrootvariable se define en /etc/bash.bashrcel archivo. Toma el contenido del /etc/debian_chrootarchivo si este existe y es legible. Por defecto este archivo no existe.

Para obtener más detalles, consulte:

Ahora, para entender mejor qué está sucediendo exactamente allí, haga lo siguiente en la terminal:

radu@Radu:~$PS1='${var:+($var)}\u@\h:\w\$ '
radu@Radu:~$var="prueba"
                  ----
                   |
  ------------------
  |
  V
(prueba)radu@Radu:~$var=""
radu@Radu:~$var="y así sucesivamente"
(y así sucesivamente)radu@Radu:~$

Respuesta3

Si la variable de entorno $debian_chrootexiste y no está vacía, ${debian_chroot:+($debian_chroot)}se reemplaza por ($debian_chroot)(ese es el valor de $debian_chrootcon sus pares alrededor).

$debian_chrootestá configurado /etc/bash.bashrcen el contenido de /etc/debian_chrootsi ese archivo existe (no existe de forma predeterminada) y $debian_chrootaún no tiene un valor.

${debian_chroot:+($debian_chroot)}generalmente se usa para definir su indicador Bash, por ejemplo

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Como sugiere el nombre, puede usar esta variable para indicar en qué chroot se encuentra colocándola etc/debian_chrooten las carpetas raíz de su chroot.

Si no sabes qué es un chroot, es probable que no lo necesites ;-) Pero aun así puedes abusar de él para incluir otra información en tu mensaje de Bash.

Por defecto no hace nada.

Respuesta4

Si nunca necesita usarlo debian_chroot, es un lugar útil para colocar la hora en que se mostró el símbolo del sistema usando:

export PROMPT_COMMAND='debian_chroot=$(date +%r)'

Escriba esto en su terminal y observe cómo su símbolo del sistema cambia con el tiempo:

rick@alien:~$ export PROMPT_COMMAND='debian_chroot=$(date +%r)'

(09:14:59 PM)rick@alien:~$ 

Después de configurar la hora una vez, para obtener un reloj en funcionamiento que se actualice cada segundo, use:

while sleep 1;do tput sc;tput cup $(($(tput lines)-1)) 1;printf `date +%r`;tput rc;done &

información relacionada