¿Cómo uso colores en el MOTD?

¿Cómo uso colores en el MOTD?

yo editéel valor por defecto/etc/update-motd.d/00-header, agregando algo de color para que sea más fácil de leer:

printf "Welcome to \e[1;34m%s\e[0m \e[2m(%s %s %s)\e[0m\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"

Puedo ejecutar esa línea de código perfectamente en una terminal, pero cuando edito 00-headercon esta información, obtengo los códigos de escape impresos en texto sin formato:

Welcome to \e[1;36mUbuntu 13.10\e[0m \e[2m(GNU/Linux 3.11.0-23-generic i686)\e[0m

¿Cómo puedo añadir un toque de color al mensaje del día?

Respuesta1

Suponiendo que estás en Ubuntu, que usa el guión para ejecutar scripts del sistema:

Ese archivo, /etc/update-motd.d/00-headeres ejecutado por/bin/dash, (no /bin/bash,) que es bastante minimalista (y rápido);
parece no ser compatible con"\mi"en este lugar - uso"\033"en cambio.

Es diferente cuándo expandir los códigos de escape.

Respuesta2

En Debian/Ubuntu motdestá configurado en /etc/pam.d/sshd:

session    optional     pam_motd.so  motd=/run/motd.dynamic
session    optional     pam_motd.so noupdate

lo que significa que al iniciar sesión exitosamente el sistema ejecutará algo como:

cat /run/motd.dynamic
if [[ -f /etc/motd ]]; then cat /etc/motd; fi

¿Dónde /etc/motdestá la parte estática (solo impresa, no obtenida)?

Debian 9/Ubuntu 16.04:

Para generar la parte dinámica run-partsse utiliza para /etc/update-motd.del directorio:

/usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d

Para obtener un código ligeramente más legible, puede utilizar tput setaf {color number}. Tenga en cuenta que para conservar los colores tenemos que establecer TERMuna variable.

#!/bin/sh
export TERM=xterm-256color

read one five fifteen rest < /proc/loadavg
echo "$(tput setaf 2)
Kernel: `uname -v | awk -v OFS=' ' '{print $4, $5}'`
$(tput setaf 4)Load Averages......: ${one}, ${five}, ${fifteen} (1, 5, 15 min)
$(tput setaf 5)
 ______________
< Hello World! >
 --------------
        \\   ^__^
         \\  (oo)\\_______
            (__)\\       )\\\/\\
                ||----w |
                ||     ||

$(tput sgr0)"

guarde el archivo como, por ejemplo/etc/update-motd.d/10-uname

y asegúrese de que sea ejecutable:

chmod +x /etc/update-motd.d/10-uname

Los colores básicos están numerados:

  • 1 – rojo
  • 2 – Verde
  • 3 – Amarillo
  • 4 – Azul
  • 5 – Magenta
  • 6 – cian
  • 7 – Blanco

El código anterior genera: color bash motd

Dependiendo de sus gustos, puede producir resultados más coloridos utilizando lolcato títulos de figlet. La salida generada utiliza la sintaxis estándar de bash:

^[(B^[[m
^[[32m
Kernel: 4.9.65-3+deb9u2 (2018-01-04)
^[[34mLoad Averages......: 0.04, 0.05, 0.05 (1, 5, 15 min)
^[[35m
 ______________
< Hello World! >
 --------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

^[(B^[[m

Debian 8/Ubuntu 14.04

La parte dinámica se actualiza usando /etc/init.d/motd startel siguiente comando:

uname -snrvm > /var/run/motd.dynamic

Respuesta3

Inserte un <ESC>carácter de escape ANSI antes del código de color. Si está utilizando Vim, estaría presionando Ctrl+K ESCo Ctrl+v+[en modo de edición.

^[

Luego escribe el código de color que desees. Por ejemplo, que sea rojo en primer plano.[31m

^[[31mHello! Glad to see you again^[[0m

El comienzo ^[debe ser un indicador de que hay un carácter de escape y [31mlos caracteres reales escritos a mano.

información relacionada